;ò
–Fc           @   sS   d  Z  d k l Z d k l Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ [ d S(   sú  Representing *very* big floating-point numbers.

No attempt is made to increase the *precision* above that of the native float
type; only the *range* of values (both towards zero and towards infinity).  Thus
BigFloat.logeps is the largest number of decimal digits worth attending to in
any float or BigFloat; but 10**BigFloat.loginf is distinguished from infinity
and 10**BigFloat.logzero is distinguished from zero.  Much the same applies to
the BigComplex type; note that (analogous to builtin complex) it holds real and
imaginary parts as separate BigFloat()s, so doesn't lose a tiny value of one
when added to a huge value of the other.

This approach (using a separate arbitrary-sized int as exponent) begs an
implementation float which uses an entire word to hold a bit-pattern denoting a
number between 1 and 2, with the leading '1.' elided (because implicit); then
all floating point instructions yield their answer in this form along with an
int register holding the power of two the answer should be scaled by; this int
is thus made available to the infrastructure tracking the overall powers of two
encoded by the arbitrary-sized int (i.e. python's long or an equivalent)
accompanying the fractional value.

$Id: bigfloat.py,v 1.12 2007/03/24 16:26:59 eddy Exp $
(   s   Lazy(   s	   FloatTypes   BigFloatc           B   sŠ  t  Z d d d „ Z d „  Z e Z d „  Z d „  Z d „  Z d „  Z d	 „  Z	 d
 „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z e d „ Z e d „ Z e Z e d „ Z e Z e d „ Z d „  Z e e d „ Z [ e d „ Z e d „ Z [ e e f \ Z Z d „  Z d „  Z d „  Z d  k Z e i  d „ Z! e i" e i# d „ Z$ d e i% d „ Z& d e i" d ƒ Z' [ d d  f \ Z( Z) x, e) d j o e( d e) d! f \ Z( Z) qWe( Z* d d  f \ Z( Z) x0 e) e) d" j o e( d e) d" f \ Z( Z) q×We( e) f \ Z+ Z, d d  f \ Z( Z) x0 e) d d j o e( d e) d! f \ Z( Z) q.We( Z- d# e+ e- d# d f \ Z. Z/ [( [) RS($   Ni   i    c         C   s—  | t | ƒ j o t d ‚ n t | ƒ t j oV | t i t i f j o t d ‚ n d | j o
 d j n o t d ‚ q‰ n t | t ƒ o  | i	 | | i
 f \ } } n | o© x8 t | ƒ t i j o! | t i | d f \ } } qÃ Wx2 t | ƒ d j o | d | d f \ } } qþ Wx< t | ƒ d	 j  o | d
 | d f \ } } q3Wn d } t | ƒ t | ƒ f \ |  _
 |  _	 d  S(   Ns   century must be wholes   infinitei   i    s   not a numberl    f1.0000000000000001e+50f1e-100f1e-50f1e+100(   s   centurys   longs
   ValueErrors   types   vals	   FloatTypes   BigFloats   infinitys
   isinstances   _BigFloat__scales   _BigFloat__centurys   abss   huges   steps   floats   self(   s   selfs   vals   century(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __init__   s*       "    #c         C   s   |  i Sd  S(   N(   s   selfs   str(   s   self(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __str__1   s    c         C   sK   d |  i } | i d ƒ \ } } t | ƒ d |  i } d | | f Sd  S(   Ns   %es   eid   s   %se%d(   s   selfs   _BigFloat__scales   anss   splits   sizs   decs   ints   _BigFloat__century(   s   selfs   ignoreds   sizs   anss   dec(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get_str_5   s    c         C   s   |  i d j Sd  S(   Ni    (   s   selfs   _BigFloat__scale(   s   self(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __nonzero__;   s    c         C   s   t  |  i ƒ t  |  i ƒ ASd  S(   N(   s   hashs   selfs   _BigFloat__scales   _BigFloat__century(   s   selfs   ignored(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get__lazy_hash_<   s    c         C   s   t  |  i |  i ƒ Sd  S(   N(   s   BigFloats   selfs   _BigFloat__scales   _BigFloat__century(   s   self(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __neg__=   s    c         C   s   t  t |  i ƒ |  i ƒ Sd  S(   N(   s   BigFloats   abss   selfs   _BigFloat__scales   _BigFloat__century(   s   self(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __abs__>   s    c         C   s   t  t |  ƒ ƒ Sd  S(   N(   s   ints   floats   self(   s   self(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __int__?   s    c         C   s   |  i Sd  S(   N(   s   selfs   long(   s   self(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __long__@   s    c         C   s   |  i Sd  S(   N(   s   selfs   float(   s   self(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys	   __float__A   s    c         C   s¬   |  i |  i f \ } } xE | d j o7 | d | d f \ } } | | d j o | Sq q WxA | d j  o3 | d | d f \ } } | d j o | Sqc qc W| Sd  S(   Ni    f1e+100i   i
   f1e-100(   s   selfs   _BigFloat__scales   _BigFloat__centurys   vals   cen(   s   selfs   ignoreds   vals   cen(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get_float_C   s        c         C   s  d |  j o
 | j  n p d |  j o
 | j n o d |  f Sn d t t |  | ƒ i d ƒ d ƒ } d |  f \ } } x} | ou t | | | ƒ } | o* | | | | | | | f \ } } n t | | | ƒ d j p t
 ‚ | d } q† W| | f Sd  S(   Ni    l    l   
 s   ei   i
   (   s   selfs   others   longs   strs   splits   qs   quots   rems   ints   ds   AssertionError(   s   selfs   others   ds   quots   qs   rem(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys
   __divmod__P   s    < '  *"c         C   sn   y |  i |  i f SWn t j
 o n Xy t |  ƒ }  Wn t j
 o |  d f Sn X|  i |  i f Sd  S(   Nl    (   s   others   _BigFloat__scales   _BigFloat__centurys   AttributeErrors   BigFloats
   ValueError(   s   other(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   extractb   s        c         C   s1   | | ƒ \ } } t |  i | |  i | ƒ Sd  S(   N(   s   gets   others   vals   cens   BigFloats   selfs   _BigFloat__scales   _BigFloat__century(   s   selfs   others   gets   vals   cen(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __mul__i   s    c         C   s1   | | ƒ \ } } t |  i | |  i | ƒ Sd  S(   N(   s   gets   others   vals   cens   BigFloats   selfs   _BigFloat__scales   _BigFloat__century(   s   selfs   others   gets   vals   cen(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __div__m   s    c         C   s1   | | ƒ \ } } t | |  i | |  i ƒ Sd  S(   N(   s   gets   others   vals   cens   BigFloats   selfs   _BigFloat__scales   _BigFloat__century(   s   selfs   others   gets   vals   cen(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __rdiv__r   s    c         C   sÒ   | | ƒ \ } } | |  i j p | d j p |  i d j o t |  i | ƒ Sn | d j  o |  i d j o d Sn | d j o |  i d j  o d Sn | d j  o t | |  i ƒ Sn t |  i | ƒ Sd  S(   Ni    i   iÿÿÿÿ(   s   gets   others   vals   cens   selfs   _BigFloat__centurys   _BigFloat__scales   cmp(   s   selfs   others   gets   vals   cen(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __cmp__w   s    -   c         C   sœ   |  d j o t i Sn |  d j  o |  }  n d } x, |  d j  o |  d | d f \ }  } q9 Wx, |  d j o |  d | d f \ }  } qh W| Sd  S(   Ni    f0.32000000000000001i
   i   f3.2000000000000002f0.10000000000000001(   s   vals   BigFloats   logzeros   i(   s   vals   i(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   decadeƒ   s          c   
      C   s@  |  i d j o t | ƒ Sn | | ƒ \ } } | d j o |  Sn | |  i j o t |  i | | ƒ Sn |  i d | |  i ƒ | d | | ƒ f \ } } | d t i | j  o t | | ƒ Sn | t i | d j o |  Sn t | | d d ƒ \ }	 } |  i d |  i |	 | d | |	 } t | |	 ƒ Sd  S(   Ni    id   i   i   l   d f1e+100(   s   selfs   _BigFloat__scales   BigFloats   others   gets   vals   cens   _BigFloat__centurys   logs   thiss   thats   logepss   divmods   eras   mid(
   s   selfs   others   gets   logs   vals   thiss   cens   thats   mids   era(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __add__‹   s       4  (c         C   sØ   |  i |  i f \ } } | d j  o d Sn | d j o) t | ƒ d j  o d Sn t | ƒ Sn | | ƒ } t	 i
 t	 i d | } | d | j o t | d d | ƒ Sn t | d | ƒ d d | | Sd  S(   Ni    l    i   i2   l   d f10.0l   
 (   s   selfs   _BigFloat__scales   _BigFloat__centurys   vals   cens   abss   longs   logs   decs   BigFloats   loginfs   logepss   gap(   s   selfs   ignoreds   logs   vals   cens   gaps   dec(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get_long_ž   s       c   
      C   sÊ  |  i d j o< | d j o |  Sn | d j  o t i Sn t i d Sn t | d ƒ \ }	 } | |  i ƒ } |  i d | | |  i
 d f \ } } | o d d f \ } } n> t | | d ƒ \ } } t | ƒ d | | | f \ } } |	 d j  o" d | | |	 f \ } } }	 n t |	 ƒ }	 x|	 o|	 d o| | | | | f \ } } x, | d j o | d | d f \ } } q`Wx0 | d	 j  o | d
 | d f \ } } qWn | d | d |	 d f \ } } }	 x, | d j o | d | d f \ } } qæWx, | d	 j  o | d
 | d f \ } } qWq1Wt | d ƒ \ } } | d j  o | d | d f \ } } n | d j o | d | d f \ } } n t | d | | ƒ Sd  S(   Ni    i   f0.10000000000000001id   f10.0f1.0i   i   f0.29999999999999999i
   iÎÿÿÿi2   (   s   selfs   _BigFloat__scales   others   BigFloats   infinitys   divmods   wholes   fracs   logs   decs   _BigFloat__centurys   vals   anss   wers   longs   cen(
   s   selfs   others   logs   vals   cens   wers   anss   fracs   decs   whole(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __pow__ª   sN      ( $ "     #$    $  c         C   s   t  |  | ƒ Sd  S(   N(   s   cmps   selfs   other(   s   selfs   other(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __rcmp__Î   s    c         C   s   |  | Sd  S(   N(   s   selfs   other(   s   selfs   other(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __sub__Ï   s    c         C   s   |  | Sd  S(   N(   s   selfs   other(   s   selfs   other(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __rsub__Ð   s    c         C   s/   t  |  t i ƒ \ } } t | | ƒ | ƒ Sd  S(   N(   s   divmods   selfs   BigFloats
   logcenturys   cs   vs   exp(   s   selfs   ignoreds   exps   cs   v(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get_exp_Ó   s    c         C   se   |  d j o% | |  i ƒ t i t |  i ƒ Sn |  d j  o t |  i | ƒ Sn | |  i ƒ Sd  S(   Ni    (   s   selfs   logs   _BigFloat__scales   BigFloats
   logcenturys   _BigFloat__centurys
   BigComplexs   pi(   s   selfs   ignoreds   logs   pi(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get_log_Û   s
    %c         C   s9   | |  i t | ƒ ƒ } | d j o |  | Sn | Sd S(   s9   Return an angle (in radians) whose tan() is self / other.i    N(   s   atans   selfs   floats   others   ans(   s   selfs   others   atans   ans(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   arctanâ   s
      id   i
   f1.0f0.10000000000000001f10.0l   
 (0   s   __name__s
   __module__s   __init__s   __str__s   __repr__s   _lazy_get_str_s   __nonzero__s   _lazy_get__lazy_hash_s   __neg__s   __abs__s   __int__s   __long__s	   __float__s   _lazy_get_float_s
   __divmod__s   extracts   __mul__s   __div__s   __truediv__s   __rdiv__s   __rtruediv__s   __cmp__s   decades   __add__s   _lazy_get_long_s   __pow__s   __rmul__s   __radd__s   __rcmp__s   __sub__s   __rsub__s   maths   exps   _lazy_get_exp_s   logs   pis   _lazy_get_log_s   atan2s   arctans
   logcenturys   is   xs   logzeros   loginfs   infinitys   logepss   huges   step(    (    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   BigFloat   sj   													"				      s
   BigComplexc           B   s5  t  Z d d „ Z d „  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z d „  Z d „  Z d „  Z d „  Z d  k Z e i d e i d „ Z [ e d „ Z [ d „  Z d „  Z e d „ Z e d „ Z e d „ Z e d „ Z e d „ Z e d „ Z e d „ Z [ e e f \ Z Z RS(   Ni    c         C   s.   t  | | ƒ t  | | ƒ f \ |  _ |  _ d  S(   N(   s   BigFloats   rs   centurys   is   selfs   reals   imag(   s   selfs   rs   is   century(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __init__ü   s    c         C   s   |  i Sd  S(   N(   s   selfs   str(   s   self(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __str__ÿ   s    c         C   s^   |  i d j o t |  i ƒ Sn |  i d j o t |  i ƒ d Sn d |  i |  i f Sd  S(   Ni    s   js   (%s+%sj)(   s   selfs   imags   strs   real(   s   selfs   ignored(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get_str_  s
      c         C   s   t  |  i |  i ƒ Sd  S(   N(   s
   BigComplexs   selfs   reals   imag(   s   selfs   ignored(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get_conjugate_  s    c         C   s   |  i ƒ  d Sd  S(   Nf0.5(   s   selfs   _BigComplex__absq(   s   selfs   ignored(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get_abs_
  s    c         C   s   |  i i |  i ƒ Sd  S(   N(   s   selfs   imags   arctans   real(   s   selfs   ignored(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get_phase_  s    c         C   s!   |  i d j p |  i d j Sd  S(   Ni    (   s   selfs   reals   imag(   s   self(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __nonzero__  s    c         C   s   t  |  i ƒ t  |  i ƒ ASd  S(   N(   s   hashs   selfs   reals   imag(   s   selfs   ignored(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get__lazy_hash_  s    c         C   s   t  |  i |  i ƒ Sd  S(   N(   s
   BigComplexs   selfs   reals   imag(   s   self(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __neg__  s    c         C   s   |  i Sd  S(   N(   s   selfs   abs(   s   self(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __abs__  s    c         C   s   t  |  i i |  i ƒ Sd  S(   N(   s
   BigComplexs   selfs   abss   logs   phase(   s   selfs   ignored(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get_log_  s    c         C   s   |  i | i Sd  S(   N(   s   selfs   logs   others   exp(   s   selfs   other(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __pow__  s    c         C   s‰   y |  | i i SWn t j
 o n Xy | i | i f \ } } Wn' t j
 o |  t	 | ƒ i i Sn X|  t
 | | ƒ i i Sd  S(   N(   s   selfs   others   logs   exps   AttributeErrors   reals   imags   rs   is   BigFloats
   Bigcomplex(   s   selfs   others   is   r(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __rpow__  s        i   c         C   s?   t  |  | ƒ \ } } | d t | ƒ ƒ d t | ƒ d Sd  S(   Nx0.01.0i   (   s   divmods   phis   qis   is   phases   exps   floats   long(   s   phis   qis   exps   is   phase(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   expi  s    c         C   s0   | |  i ƒ } t | i | i ƒ |  i i Sd  S(   N(   s   expis   selfs   imags   phases
   BigComplexs   reals   exp(   s   selfs   ignoreds   expis   phase(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   _lazy_get_exp_#  s    c         C   sJ   y |  i } Wn2 t j
 o& |  i d |  i d |  _ } n X| Sd  S(   Ni   (   s   selfs   _BigComplex__abssquares   anss   AttributeErrors   reals   imag(   s   selfs   ans(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __absq(  s
     $c         C   s8   y |  i |  i f SWn t j
 o |  d f Sn Xd  S(   Ni    (   s   others   reals   imags   AttributeError(   s   other(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   extract.  s      c         C   s3   | | ƒ \ } } | |  i j o | |  i j Sd  S(   N(   s   gets   others   rs   is   selfs   reals   imag(   s   selfs   others   gets   is   r(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __eq__2  s    c         C   s1   | | ƒ \ } } t |  i | |  i | ƒ Sd  S(   N(   s   gets   others   rs   is
   BigComplexs   selfs   reals   imag(   s   selfs   others   gets   is   r(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __add__6  s    c         C   s1   | | ƒ \ } } t |  i | |  i | ƒ Sd  S(   N(   s   gets   others   rs   is
   BigComplexs   selfs   reals   imag(   s   selfs   others   gets   is   r(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __sub__:  s    c         C   s1   | | ƒ \ } } t | |  i | |  i ƒ Sd  S(   N(   s   gets   others   rs   is
   BigComplexs   selfs   reals   imag(   s   selfs   others   gets   is   r(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __rsub__>  s    c         C   sG   | | ƒ \ } } t |  i | |  i | |  i | |  i | ƒ Sd  S(   N(   s   gets   others   rs   is
   BigComplexs   selfs   reals   imag(   s   selfs   others   gets   is   r(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __mul__B  s    c         C   sm   | | ƒ \ } } t | ƒ d t | ƒ d } t |  i | |  i	 | | |  i	 | |  i | | ƒ Sd  S(   Ni   (
   s   gets   others   rs   is   BigFloats   as
   BigComplexs   selfs   reals   imag(   s   selfs   others   gets   as   is   r(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __div__G  s    c         C   s[   | | ƒ \ } } |  i ƒ  } t |  i | |  i	 | | |  i | |  i	 | | ƒ Sd  S(   N(
   s   gets   others   rs   is   selfs   _BigComplex__absqs   as
   BigComplexs   reals   imag(   s   selfs   others   gets   as   is   r(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   __rdiv__M  s    (    s   __name__s
   __module__s   __init__s   __str__s   __repr__s   _lazy_get_str_s   _lazy_get_conjugate_s   _lazy_get_abs_s   _lazy_get_phase_s   __nonzero__s   _lazy_get__lazy_hash_s   __neg__s   __abs__s   _lazy_get_log_s   __pow__s   __rpow__s   cmaths   pis   exps   expis   _lazy_get_exp_s   _BigComplex__absqs   extracts   __eq__s   __add__s   __sub__s   __rsub__s   __mul__s   __div__s   __rdiv__s   __rmul__s   __radd__(    (    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys
   BigComplexû   s<   															N(   s   __doc__s   lazys   Lazys   typess	   FloatTypes   BigFloats
   BigComplex(   s
   BigComplexs   Lazys   BigFloats	   FloatType(    (    s*   /home/eddy/.sys/py/study/value/bigfloat.pys   ?   s
   á[