o 6a?*@s^dZdgZddlmZddlmZddlmZedGdddZe dkr-e ed Sd S) z Machine arithmetics - determine the parameters of the floating-point arithmetic system Author: Pearu Peterson, September 2003 MachAr)any)errstate) set_modulenumpyc@s8eZdZdZeeedddfddZddZd d Zd S) ra 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 Same as `xmin`. huge : float Same as `xmax`. precision : float ``- int(-log10(eps))`` resolution : float ``- 10**(-precision)`` 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. cCsd|S)Nz%24.16e)vrr3/usr/lib/python3/dist-packages/numpy/core/machar.pydszMachAr.zPython floating point numbercCsBtdd||||||WddS1swYdS)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_strtitlerrr __init__bs "zMachAr.__init__c.Csd}d}|d}||} ||} |} t|D]} | | } | |} | | }t||| kr.n qt|| |jf|}t|D]} ||}| |} || | }t|dkrVn q>t|| |jf|}||}d}|}t|D]} |d}||}||} | |}t||| krn qnt|| |jf|| }|} t|D]} | | } | |} | | }t||| krn qt|| |jf| |} d}t| | | krd}| |}||} |dkrt| || krd}|d}||}|} t|D]}| |} q| }t|D]&} || } t| || krn| |} |d}|dkr&tdtqt|| |jf| }| }| d}|} t|D]} || } t| || krRn| |} |d}qAt|| |jf| }d}||} |dkrt| ||| krd}d}d}|}||} d}!t|D]<} |}"|"|"}||} || } t| | | kstt||"krn"| |}t|||krn|d}||}qt|| |jf|d kr|d}#||}$nd}#|}%||%kr|%|}%|#d}#||%ks|%|%d}$t|D]C} |"}&|"|}"|"|} |"| } t| | | krEtt|"|&krE|d}| |}t|||"krCt| |"krCd}!|"}&n qn t|| |jf| }'|$||dkri|d kri|$|$}$|#d}#|$|'}(||!}|dkrz|(d}(|(|'}|dkr|s|(d}(|d kr|(d}(t| |"kr|(d}(||})t|)||)kr|||})|)|&|||})|(|'d}t|D]}*|dkr|)|)})q|)|})q||_||_||_|||_ |||_ ||_ |||_ |||_ ||_|#|_|'|_||&|_||&|_|(|_||)|_||)|_||_||_|j |_|j|_|j|_ddl}+t|+||j  |_| | | | | },|,|j }-||-|_||-|_ dS) Ni'z'Did not converge after %d tries with %srzAcould not determine machine tolerance for 'negep', locals() -> %s )!ranger RuntimeErrordtypelocalsabsibetaitnegepepsneg _str_epsnegmachepeps_str_epsngrdiexpminexpxmin _str_xminmaxexpxmax _str_xmaxirndrepsilontinyhugemathintlog10 precision resolution_str_resolution).rrrrrr max_iterNmsgonetwozeroa_temptemp1bitempr betar!betahr0tempar"betainir#r%r&r(kztnxresyr)mxizr+r*r-r.jr4tenr8rrr r tsl               $      $                   zMachAr._do_initcCsd}||jS)NaMachine 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) --------------------------------------------------------------------- )__dict__)rfmtrrr __str__Gs zMachAr.__str__N) __name__ __module__ __qualname____doc__floatr5rr rUrrrr rsP  T__main__N) rY__all__numpy.core.fromnumericrnumpy.core._ufunc_configrnumpy.core.overridesrrrVprintrrrr s   F