U C^l*@spdZddlmZmZmZdgZddlmZddlm Z ddl m Z e dGddde Z ed krlee d S) z Machine arithmetics - determine the parameters of the floating-point arithmetic system Author: Pearu Peterson, September 2003 )divisionabsolute_importprint_functionMachAr)any)errstate) set_moduleZnumpyc@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] usable floating value). 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)vr r 4/tmp/pip-install-6_kvzl1k/numpy/numpy/core/machar.pyfzMachAr.zPython floating point numberc Cs,tdd||||||W5QRXdS)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)ZunderN)r_do_init)self float_convint_convfloat_to_float float_to_strtitler r r __init__ds zMachAr.__init__c.Csd}d}|d}||} ||} |} t|D]0} | | } | |} | | }t||| kr,qpq,t|| |jf|}t|D]0} ||}| |} || | }t|dkr|qq|t|| |jf|}||}d}|}t|D]:} |d}||}||} | |}t||| krq*qt|| |jf|| }|} t|D]6} | | } | |} | | }t||| kr>qq>t|| |jf| |} d}t| | | krd}| |}||} |dkrt| || krd}|d}||}|} t|D]}| |} q| }t|D]N} || } t| || kr6qt| |} |d}|dkrtdtqt|| |jf| }| }| d}|} t|D]6} || } t| || krq| |} |d}qt|| |jf| }d}||} |dkrt| ||| krd}d}d}|}||} d}!t|D]|} |}"|"|"}||} || } t| | | ksvtt||"kr|q| |}t|||krq|d}||}q2t|| |jf|d kr|d}#||}$n2d}#|}%||%kr|%|}%|#d}#q|%|%d}$t|D]} |"}&|"|}"|"|} |"| } t| | | krtt|"|&kr|d}| |}t|||"krt| |"krd}!|"}&qnqqt|| |jf| }'|$||dkr|d kr|$|$}$|#d}#|$|'}(||!}|dkr |(d}(|(|'}|dkr,|s,|(d}(|d kr>|(d}(t| |"krT|(d}(||})t|)||)krz|||})|)|&|||})|(|'d}t|D]"}*|dkr|)|)})n|)|})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 RuntimeErrorZdtypelocalsabsibetaitnegepepsnegZ _str_epsnegmachepepsZ_str_epsngrdiexpminexpxminZ _str_xminmaxexpxmaxZ _str_xmaxirndrepsilonZtinyZhugemathintlog10Z precision resolutionZ_str_resolution).rrrrrrZ max_iterNmsgZoneZtwoZzeroa_tempZtemp1bZitempr!betar"Zbetahr-Ztempar#Zbetainir$r%r&r'kztZnxresyr(ZmxZizr*r)r+r,jr/Ztenr2r r r rvs^                 $       $                    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__)rfmtr r r __str__Is zMachAr.__str__N) __name__ __module__ __qualname____doc__floatr0rrrAr r r r rsP T__main__N)rE __future__rrr__all__Znumpy.core.fromnumericrZnumpy.core._ufunc_configrZnumpy.core.overridesrobjectrrBprintr r r r s   F