bg--dZdgZddlmZddlmZddlmZGddZe dkre ed Sd S) z Machine arithmetic - determine the parameters of the floating-point arithmetic system Author: Pearu Peterson, September 2003 MachAr)any)errstate) set_modulec2eZdZdZeeeddfdZdZdZdS)raw Diagnosing machine parameters. Attributes ---------- ibeta : int Radix in which numbers are represented. it : int Number of base-`ibeta` digits in the floating point mantissa M. machep : int Exponent of the smallest (most negative) power of `ibeta` that, added to 1.0, gives something different from 1.0 eps : float Floating-point number ``beta**machep`` (floating point precision) negep : int Exponent of the smallest power of `ibeta` that, subtracted from 1.0, gives something different from 1.0. epsneg : float Floating-point number ``beta**negep``. iexp : int Number of bits in the exponent (including its sign and bias). minexp : int Smallest (most negative) power of `ibeta` consistent with there being no leading zeros in the mantissa. xmin : float Floating-point number ``beta**minexp`` (the smallest [in magnitude] positive floating point number with full precision). maxexp : int Smallest (positive) power of `ibeta` that causes overflow. xmax : float ``(1-epsneg) * beta**maxexp`` (the largest [in magnitude] usable floating value). irnd : int In ``range(6)``, information on what kind of rounding is done in addition, and on how underflow is handled. ngrd : int Number of 'guard digits' used when truncating the product of two mantissas to fit the representation. epsilon : float Same as `eps`. tiny : float An alias for `smallest_normal`, kept for backwards compatibility. huge : float Same as `xmax`. precision : float ``- int(-log10(eps))`` resolution : float ``- 10**(-precision)`` smallest_normal : float The smallest positive floating point number with 1 as leading bit in the mantissa following IEEE-754. Same as `xmin`. smallest_subnormal : float The smallest positive floating point number with 0 as leading bit in the mantissa following IEEE-754. Parameters ---------- float_conv : function, optional Function that converts an integer or integer array to a float or float array. Default is `float`. int_conv : function, optional Function that converts a float or float array to an integer or integer array. Default is `int`. float_to_float : function, optional Function that converts a float array to float. Default is `float`. Note that this does not seem to do anything useful in the current implementation. float_to_str : function, optional Function that converts a single float to a string. Default is ``lambda v:'%24.16e' %v``. title : str, optional Title that is printed in the string representation of `MachAr`. See Also -------- finfo : Machine limits for floating point types. iinfo : Machine limits for integer types. References ---------- .. [1] Press, Teukolsky, Vetterling and Flannery, "Numerical Recipes in C++," 2nd ed, Cambridge University Press, 2002, p. 31. c d|zS)Nz%24.16e)vs I/opt/cloudlinux/venv/lib64/python3.11/site-packages/numpy/core/_machar.pyzMachAr.js y1}zPython floating point numberctd5||||||ddddS#1swxYwYdS)a! float_conv - convert integer to float (array) int_conv - convert float (array) to integer float_to_float - convert float array to float float_to_str - convert array float to str title - description of used floating point numbers ignore)underN)r_do_init)self float_convint_convfloat_to_float float_to_strtitles r __init__zMachAr.__init__hsH % % % U U MM*h e T T T U U U U U U U U U U U U U U U U U Us 8<<c d}d}|d}||z} ||z } |} t|D])} | | z} | |z} | | z }t||z | krn*t|| |jfz|}t|D]/} ||z}| |z} || | z }t|dkrn0t|| |jfz|}||}d}|}t|D].} |dz}||z}||z} | |z }t||z | krn/t|| |jfz|| z }|} t|D])} | | z} | |z} | | z }t||z | krn*t|| |jfz| |z} d}t| | z | krd}| |z}||z} |dkrt| |z | krd}|dz}||z }|} t|D]}| |z} | }t|D]M} || z } t| |z | krnH| |z} |dz }|dkrtdt zNt|| |jfz| }| }| dz }|} t|D])} || z} t| |z | krn$| |z} |dz}*t|| |jfz| }d}||z} |dkrt| |z|z | krd}d}d}|}||z} d}!t|D]r} |}"|"|"z}||z} || z} t| | z| ks tt ||"krnA| |z}t||z|krn$|dz}||z}st|| |jfz|d kr |dz}#||z}$n"d}#|}%||%kr|%|z}%|#dz}#||%k|%|%zdz }$t|D]} |"}&|"|z}"|"|z} |"| z} t| | z| krZtt |"|&kr:|dz}| |z}t||z|"krt| |"krd}!|"}&nnt|| |jfz| }'|$||zdz kr|d kr |$|$z}$|#dz}#|$|'z}(||!z}|dkr|(dz }(|(|'z}|dkr|s|(dz }(|d kr|(dz }(t| |"kr|(dz }(||z })t|)|z|)kr|||zz })|)|&|z|z|zz })|(|'zdz}t|D]}*|dkr|)|)z})|)|z})t |&||zz }+||_||_||_|||_ |||_ ||_ |||_ |||_ ||_|#|_|'|_||&|_||&|_|(|_||)|_||)|_||_||_|j |_|j|_|j|_|j|_||j|_||+|_||+|_ddl},tA|,!||j  |_"| | z| z| z| z}-|-|j" z}.||.|_#||.|_$dS) Ni'z'Did not converge after %d tries with %srrzAcould not determine machine tolerance for 'negep', locals() -> %s )%ranger RuntimeErrordtypelocalsabsibetaitnegepepsneg _str_epsnegmachepeps_str_epsngrdiexpminexpxmin _str_xminmaxexpxmax _str_xmaxirndrepsilontinyhugesmallest_normal_str_smallest_normalsmallest_subnormal_str_smallest_subnormalmathintlog10 precision resolution_str_resolution)/rrrrrr max_iterNmsgonetwozeroa_temptemp1bitempr%betar&betahr5tempar'betainir(r*r+r-kztnxresyr.mxizr0r/r2r3jr;r=tenrAs/ r rzMachAr._do_initzs6  7jmmCiSy y!! 5 5AAAs7D1HE53;$&''  sa^344 4 y!! 5 5AAAq5DHT!V$$E5A:  sa^344 4z%   y!! 5 5AaBDAs7D1HE53;$&''  sa^344 4s  y!! 5 5AAAs7D1HE53;$&''  sa^344 45y tAv~   DDu} 199T%Z4/009DQt u  AF AA y!! 5 5A7D48t#$$ DAAIEqyy"$ADJHH$NOOOsa^344 4 y!! 5 5A7D48t#$$ DAaZFFsa^344 4Sy 199T#X^t3449D    #Iy!! 5 5AA!A#AQ3D1Q3$; 3s1vv{#3#3 6ME5:?## AAAAAsa^344 4 B;;q5DQBBDBr''%Zaxr''b1By!! 5 5ADF ACAq5DAEd?## CFFTM(:(: Ev uTzQ''C NNEDEsa^344 4 Q??u{{bB!8Dfe| 199aZF VO A::a:aZF r66aZF qAv;; aZFV| tCx4  %f$DtDy~d*+ VOa q # #Azzd{d{  !455  $nV,, '<// !>#&&$ S))    "N4(( %d++ "N4(( %d++  x I I #y$0L$;$;!"0.1C"D"D'3|4F'G'G$ djj)A)ABBBCCCi#o#c)dn_- (.44+|J77rcd}||jzS)NaCMachine parameters for %(title)s --------------------------------------------------------------------- ibeta=%(ibeta)s it=%(it)s iexp=%(iexp)s ngrd=%(ngrd)s irnd=%(irnd)s machep=%(machep)s eps=%(_str_eps)s (beta**machep == epsilon) negep =%(negep)s epsneg=%(_str_epsneg)s (beta**epsneg) minexp=%(minexp)s xmin=%(_str_xmin)s (beta**minexp == tiny) maxexp=%(maxexp)s xmax=%(_str_xmax)s ((1-epsneg)*beta**maxexp == huge) smallest_normal=%(smallest_normal)s smallest_subnormal=%(smallest_subnormal)s --------------------------------------------------------------------- )__dict__)rfmts r __str__zMachAr.__str__Ss U T]""rN) __name__ __module__ __qualname____doc__floatr>rrr_r rr rrsnTTl#( %445UUUU$W8W8W8r # # # # #r__main__N) rc__all__ fromnumericr _ufunc_configr_utilsrrr`printr rr rks *###### O#O#O#O#O#O#O#O#d  z E&&((OOOOOr