Changeset 16043:9abc85a5b40a


Ignore:
Timestamp:
01/09/10 11:41:39 (3 years ago)
Author:
Robert Bradshaw <robertwb@…>
Branch:
default
Message:

Trac #7879: Trac #7879: Remove unnecessary signal handling for low prec mpfr operations.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sage/rings/real_mpfr.pyx

    r15989 r16043  
    168168cdef object numpy_object_interface = {'typestr': '|O'} 
    169169 
     170# Avoid signal handling for cheap operations when the 
     171# precision is below this threshold. 
     172cdef enum: 
     173    SIG_PREC_THRESHOLD = 1000 
     174 
    170175#***************************************************************************** 
    171176# 
     
    811816            0.88622692545275801364908374167057259139877473 
    812817        """ 
    813         cdef RealNumber x 
    814         x = self._new() 
    815         sig_on() 
     818        cdef RealNumber x = self._new() 
     819        if self.__prec > SIG_PREC_THRESHOLD: sig_on() 
    816820        # The docs for mpfr_free_cache say "Free the cache used by 
    817821        # the functions computing constants if needed (currently 
     
    823827        mpfr_free_cache() 
    824828        mpfr_const_pi(x.value, self.rnd) 
    825         sig_off() 
     829        if self.__prec > SIG_PREC_THRESHOLD: sig_off() 
    826830        return x 
    827831 
     
    837841            0.57721566490153286060651209008 
    838842        """ 
    839         cdef RealNumber x 
    840         x = self._new() 
     843        cdef RealNumber x = self._new() 
    841844        sig_on() 
    842845        mpfr_free_cache() 
     
    855858            0.91596559417721901505460351493 
    856859        """ 
    857         cdef RealNumber x 
    858         x = self._new() 
    859         sig_on() 
     860        cdef RealNumber x = self._new() 
     861        if self.__prec > SIG_PREC_THRESHOLD: sig_on() 
    860862        mpfr_free_cache() 
    861863        mpfr_const_catalan(x.value, self.rnd) 
    862         sig_off() 
     864        if self.__prec > SIG_PREC_THRESHOLD: sig_off() 
    863865        return x 
    864866 
     
    878880        """ 
    879881        cdef RealNumber x = self._new() 
    880         sig_on() 
     882        if self.__prec > SIG_PREC_THRESHOLD: sig_on() 
    881883        mpfr_free_cache() 
    882884        mpfr_const_log2(x.value, self.rnd) 
    883         sig_off() 
     885        if self.__prec > SIG_PREC_THRESHOLD: sig_off() 
    884886        return x 
    885887         
     
    964966            raise ArithmeticError, "n must be nonnegative" 
    965967        x = self._new() 
    966         sig_on() 
     968        if self.__prec > SIG_PREC_THRESHOLD and n < SIG_PREC_THRESHOLD: sig_on() 
    967969        mpfr_fac_ui(x.value, n, self.rnd) 
    968         sig_off() 
     970        if self.__prec > SIG_PREC_THRESHOLD and n < SIG_PREC_THRESHOLD: sig_off() 
    969971        return x 
    970972 
     
    18691871            1.00000000000000 
    18701872        """ 
    1871         cdef RealNumber x 
    1872         x = self._new() 
     1873        cdef RealNumber x = self._new() 
    18731874        mpfr_add(x.value, self.value, (<RealNumber>other).value, (<RealField_class>self._parent).rnd) 
    18741875        return x 
     
    18871888            -4.00000000000000 
    18881889        """ 
    1889         cdef RealNumber x 
    1890         x = self._new() 
     1890        cdef RealNumber x = self._new() 
    18911891        mpfr_sub(x.value, self.value, (<RealNumber>right).value, (<RealField_class> self._parent).rnd) 
    18921892        return x 
     
    19221922            Real Field with 20 bits of precision 
    19231923        """ 
    1924         cdef RealNumber x 
    1925         x = self._new() 
     1924        cdef RealNumber x = self._new() 
    19261925        mpfr_mul(x.value, self.value, (<RealNumber>right).value, (<RealField_class>self._parent).rnd) 
    19271926        return x 
     
    19461945            -0.600000000000000 
    19471946        """ 
    1948         cdef RealNumber x 
    1949         x = self._new() 
     1947        cdef RealNumber x = self._new() 
    19501948        mpfr_div((<RealNumber>x).value, self.value, 
    19511949                 (<RealNumber>right).value, (<RealField_class>self._parent).rnd) 
     
    19651963            NaN 
    19661964        """ 
    1967         cdef RealNumber x 
    1968         x = self._new() 
     1965        cdef RealNumber x = self._new() 
    19691966        mpfr_neg(x.value, self.value, (<RealField_class>self._parent).rnd) 
    19701967        return x 
     
    20021999            NaN 
    20032000        """ 
    2004         cdef RealNumber x 
    2005         x = self._new()         
     2001        cdef RealNumber x = self._new()         
    20062002        mpfr_abs(x.value, self.value, (<RealField_class>self._parent).rnd) 
    20072003        return x 
     
    20592055        if n > sys.maxint: 
    20602056            raise OverflowError, "n (=%s) must be <= %s"%(n, sys.maxint) 
    2061         cdef RealNumber x 
    2062         x = self._new() 
     2057        cdef RealNumber x = self._new() 
    20632058        mpfr_div_2exp(x.value, self.value, n, (<RealField_class>self._parent).rnd) 
    20642059        return x 
     
    22492244             -1 
    22502245         """ 
    2251         cdef RealNumber x 
    2252         x = self._new() 
     2246        cdef RealNumber x = self._new() 
    22532247        mpfr_round(x.value, self.value) 
    22542248        return x.integer_part() 
     
    23272321            0 
    23282322        """ 
    2329         cdef RealNumber x 
    2330         x = self._new() 
     2323        cdef RealNumber x = self._new() 
    23312324        mpfr_trunc(x.value, self.value) 
    23322325        return x.integer_part() 
     
    23812374            other_rn = self._parent(other) 
    23822375 
    2383         cdef RealNumber x 
    2384         x = self._new() 
     2376        cdef RealNumber x = self._new() 
    23852377         
    23862378        mpfr_set(x.value, self.value, GMP_RNDN) 
     
    24072399        """ 
    24082400 
    2409         cdef RealNumber x 
    2410         x = self._new() 
     2401        cdef RealNumber x = self._new() 
    24112402        mpfr_set(x.value, self.value, GMP_RNDN) 
    24122403        mpfr_nextabove(x.value) 
     
    24322423        """ 
    24332424 
    2434         cdef RealNumber x 
    2435         x = self._new() 
     2425        cdef RealNumber x = self._new() 
    24362426        mpfr_set(x.value, self.value, GMP_RNDN) 
    24372427        mpfr_nextbelow(x.value) 
     
    33983388        if mpfr_cmp_ui(self.value, 0) >= 0: 
    33993389            x = self._new() 
    3400             sig_on()                 
     3390            if (<RealField_class>self._parent).__prec > 10*SIG_PREC_THRESHOLD: sig_on() 
    34013391            mpfr_sqrt(x.value, self.value, (<RealField_class>self._parent).rnd) 
    3402             sig_off() 
     3392            if (<RealField_class>self._parent).__prec > 10*SIG_PREC_THRESHOLD: sig_off() 
    34033393            if all: 
    34043394                if x.is_zero(): 
     
    34433433            -1.42108547152020e-14 
    34443434        """ 
    3445         cdef RealNumber x 
    3446         x = self._new() 
    3447         sig_on()                 
     3435        cdef RealNumber x = self._new() 
     3436        if (<RealField_class>self._parent).__prec > 10*SIG_PREC_THRESHOLD: sig_on() 
    34483437        mpfr_cbrt(x.value, self.value, (<RealField_class>self._parent).rnd) 
    3449         sig_off()         
     3438        if (<RealField_class>self._parent).__prec > 10*SIG_PREC_THRESHOLD: sig_off() 
    34503439        return x 
    34513440 
     
    35703559        if base == 'e': 
    35713560            x = self._new() 
    3572             sig_on()                 
     3561            if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on() 
    35733562            mpfr_log(x.value, self.value, (<RealField_class>self._parent).rnd) 
    3574             sig_off()         
     3563            if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off() 
    35753564            return x 
    35763565        elif base == 10: 
     
    36113600            return self._complex_number_().log(2) 
    36123601        x = self._new() 
    3613         sig_on()                 
     3602        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on() 
    36143603        mpfr_log2(x.value, self.value, (<RealField_class>self._parent).rnd) 
    3615         sig_off()         
     3604        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off() 
    36163605        return x 
    36173606 
     
    36483637            return self._complex_number_().log(10) 
    36493638        x = self._new() 
    3650         sig_on()                 
     3639        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on() 
    36513640        mpfr_log10(x.value, self.value, (<RealField_class>self._parent).rnd) 
    3652         sig_off() 
     3641        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off() 
    36533642        return x 
    36543643 
     
    36763665            2.9999999995500000000978021372e-10 
    36773666         
     3667        For small values, this is more accurate than computing `log(1 + self)` 
     3668        directly, as it avoid cancelation issues:: 
     3669         
     3670            sage: r = 3e-10 
     3671            sage: r.log1p() 
     3672            2.99999999955000e-10 
     3673            sage: (1+r).log() 
     3674            3.00000024777111e-10 
     3675            sage: r100 = RealField(100)(r) 
     3676            sage: (1+r100).log() 
     3677            2.9999999995500000000978021372e-10 
     3678         
    36783679        :: 
    36793680         
     
    36973698            return (self+1.0)._complex_number_().log() 
    36983699        x = self._new() 
    3699         sig_on()                 
     3700        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on() 
    37003701        mpfr_log1p(x.value, self.value, (<RealField_class>self._parent).rnd) 
    3701         sig_off() 
     3702        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off() 
    37023703        return x 
    37033704 
     
    37263727            9.38184458849869e-15 
    37273728        """ 
    3728         cdef RealNumber x 
    3729         x = self._new() 
     3729        cdef RealNumber x = self._new() 
    37303730        sig_on()                 
    37313731        mpfr_exp(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    37553755            1.89117248253021e-10 
    37563756        """ 
    3757         cdef RealNumber x 
    3758         x = self._new() 
    3759         sig_on()                 
     3757        cdef RealNumber x = self._new() 
     3758        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on() 
    37603759        mpfr_exp2(x.value, self.value, (<RealField_class>self._parent).rnd) 
    3761         sig_off()         
     3760        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off() 
    37623761        return x 
    37633762 
     
    37843783            5.01187233627276e-33 
    37853784        """ 
    3786         cdef RealNumber x 
    3787         x = self._new() 
    3788         sig_on()                 
     3785        cdef RealNumber x = self._new() 
     3786        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on() 
    37893787        mpfr_exp10(x.value, self.value, (<RealField_class>self._parent).rnd) 
    3790         sig_off()         
     3788        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off() 
    37913789        return x 
    37923790 
     
    38103808            1.00000000000000e-16 
    38113809        """ 
    3812         cdef RealNumber x 
    3813         x = self._new() 
    3814         sig_on()                 
     3810        cdef RealNumber x = self._new() 
     3811        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on() 
    38153812        mpfr_expm1(x.value, self.value, (<RealField_class>self._parent).rnd) 
    3816         sig_off()         
     3813        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off() 
    38173814        return x 
    38183815 
     
    38333830            NaN 
    38343831        """ 
    3835         cdef RealNumber x 
    3836         x = self._new() 
    3837         sig_on()                 
     3832        cdef RealNumber x = self._new() 
     3833        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on() 
    38383834        mpfr_eint(x.value, self.value, (<RealField_class>self._parent).rnd) 
    3839         sig_off()         
     3835        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on() 
    38403836        return x 
    38413837 
     
    38503846            6.12323399573677e-17 
    38513847        """ 
    3852         cdef RealNumber x 
    3853         x = self._new() 
    3854         sig_on()                 
     3848        cdef RealNumber x = self._new() 
     3849        sig_on() 
    38553850        mpfr_cos(x.value, self.value, (<RealField_class>self._parent).rnd) 
    38563851        sig_off()         
     
    38763871            0.90929742682568169539601986591 
    38773872        """ 
    3878         cdef RealNumber x 
    3879         x = self._new() 
     3873        cdef RealNumber x = self._new() 
    38803874        sig_on()                 
    38813875        mpfr_sin(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    38963890            0.577350269189626 
    38973891        """ 
    3898         cdef RealNumber x 
    3899         x = self._new() 
     3892        cdef RealNumber x = self._new() 
    39003893        sig_on()                 
    39013894        mpfr_tan(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    39363929            True 
    39373930        """ 
    3938         cdef RealNumber x 
    3939         x = self._new() 
     3931        cdef RealNumber x = self._new() 
    39403932        sig_on()                 
    39413933        mpfr_acos(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    39563948            0.000000000000000 
    39573949        """ 
    3958         cdef RealNumber x 
    3959         x = self._new() 
     3950        cdef RealNumber x = self._new() 
    39603951        sig_on()                 
    39613952        mpfr_asin(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    39743965            True 
    39753966        """ 
    3976         cdef RealNumber x 
    3977         x = self._new() 
     3967        cdef RealNumber x = self._new() 
    39783968        sig_on()                 
    39793969        mpfr_atan(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    39953985            1.03446564009551 
    39963986        """ 
    3997         cdef RealNumber x 
    3998         x = self._new() 
     3987        cdef RealNumber x = self._new() 
    39993988        sig_on()                 
    40003989        mpfr_cosh(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    40124001            0.264800227602271 
    40134002        """ 
    4014         cdef RealNumber x 
    4015         x = self._new() 
     4003        cdef RealNumber x = self._new() 
    40164004        sig_on()                 
    40174005        mpfr_sinh(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    40294017            0.278079429295850 
    40304018        """ 
    4031         cdef RealNumber x 
    4032         x = self._new() 
     4019        cdef RealNumber x = self._new() 
    40334020        sig_on()                 
    40344021        mpfr_tanh(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    40454032            1.0373147207275480958778097648 
    40464033        """ 
    4047         cdef RealNumber x 
    4048         x = self._new() 
     4034        cdef RealNumber x = self._new() 
    40494035        sig_on()                 
    40504036        mpfr_coth(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    40744060            -0.45765755436028576375027741043 
    40754061        """ 
    4076         cdef RealNumber x 
    4077         x = self._new() 
     4062        cdef RealNumber x = self._new() 
    40784063        sig_on()                 
    40794064        mpfr_cot(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    40904075            0.27572056477178320775835148216 
    40914076        """ 
    4092         cdef RealNumber x 
    4093         x = self._new() 
     4077        cdef RealNumber x = self._new() 
    40944078        sig_on()                 
    40954079        mpfr_csch(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    41194103            1.0997501702946164667566973970 
    41204104        """ 
    4121         cdef RealNumber x 
    4122         x = self._new() 
     4105        cdef RealNumber x = self._new() 
    41234106        sig_on()                 
    41244107        mpfr_csc(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    41354118            0.26580222883407969212086273982 
    41364119        """ 
    4137         cdef RealNumber x 
    4138         x = self._new() 
     4120        cdef RealNumber x = self._new() 
    41394121        sig_on()                 
    41404122        mpfr_sech(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    41644146            -2.4029979617223809897546004014 
    41654147        """ 
    4166         cdef RealNumber x 
    4167         x = self._new() 
     4148        cdef RealNumber x = self._new() 
    41684149        sig_on()                 
    41694150        mpfr_sec(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    41834164            True 
    41844165        """ 
    4185         cdef RealNumber x 
    4186         x = self._new() 
     4166        cdef RealNumber x = self._new() 
    41874167        sig_on()                 
    41884168        mpfr_acosh(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    42024182            0.000000000000000 
    42034183        """ 
    4204         cdef RealNumber x 
    4205         x = self._new() 
     4184        cdef RealNumber x = self._new() 
    42064185        sig_on()                 
    42074186        mpfr_asinh(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    42214200            0.000000000000000 
    42224201        """ 
    4223         cdef RealNumber x 
    4224         x = self._new() 
     4202        cdef RealNumber x = self._new() 
    42254203        sig_on()         
    42264204        mpfr_atanh(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    43124290            1.00000000000000 
    43134291        """ 
    4314         cdef RealNumber x 
    4315         x = self._new() 
     4292        cdef RealNumber x = self._new() 
    43164293        sig_on() 
    43174294        mpfr_erf(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    43324309            2.15197367124989e-17 
    43334310        """ 
    4334         cdef RealNumber x 
    4335         x = self._new() 
     4311        cdef RealNumber x = self._new() 
    43364312        sig_on() 
    43374313        mpfr_erfc(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    43494325            0.223890779141236 
    43504326        """ 
    4351         cdef RealNumber x 
    4352         x = self._new() 
     4327        cdef RealNumber x = self._new() 
    43534328        sig_on() 
    43544329        mpfr_j0(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    43664341            0.576724807756873 
    43674342        """ 
    4368         cdef RealNumber x 
    4369         x = self._new() 
     4343        cdef RealNumber x = self._new() 
    43704344        sig_on() 
    43714345        mpfr_j1(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    43864360            -2.65930780516787e-15 
    43874361        """ 
    4388         cdef RealNumber x 
    4389         x = self._new() 
     4362        cdef RealNumber x = self._new() 
    43904363        sig_on() 
    43914364        mpfr_jn(x.value, n, self.value, (<RealField_class>self._parent).rnd) 
     
    44034376            0.510375672649745 
    44044377        """ 
    4405         cdef RealNumber x 
    4406         x = self._new() 
     4378        cdef RealNumber x = self._new() 
    44074379        sig_on() 
    44084380        mpfr_y0(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    44204392            -0.107032431540938 
    44214393        """ 
    4422         cdef RealNumber x 
    4423         x = self._new() 
     4394        cdef RealNumber x = self._new() 
    44244395        sig_on() 
    44254396        mpfr_y1(x.value, self.value, (<RealField_class>self._parent).rnd) 
     
    44404411            7.09038821729481e12 
    44414412        """ 
    4442         cdef RealNumber x 
    4443         x = self._new() 
     4413        cdef RealNumber x = self._new() 
    44444414        sig_on() 
    44454415        mpfr_yn(x.value, n, self.value, (<RealField_class>self._parent).rnd) 
     
    44594429            0.886226925452758 
    44604430        """ 
    4461         cdef RealNumber x 
    4462         x = self._new() 
    4463         sig_on() 
     4431        cdef RealNumber x = self._new() 
     4432        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on() 
    44644433        mpfr_gamma(x.value, self.value, (<RealField_class>self._parent).rnd) 
    4465         sig_off() 
     4434        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off() 
    44664435        return x 
    44674436 
     
    44944463            2.20258509288811e11 
    44954464        """ 
    4496         cdef RealNumber x 
    4497         x = self._new() 
    4498         sig_on() 
     4465        cdef RealNumber x = self._new() 
     4466        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on() 
    44994467        mpfr_lngamma(x.value, self.value, (<RealField_class>self._parent).rnd) 
    4500         sig_off() 
     4468        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off() 
    45014469        return x 
    45024470 
     
    45464514            1.64493406684823 
    45474515        """ 
    4548         cdef RealNumber x 
    4549         x = self._new() 
     4516        cdef RealNumber x = self._new() 
    45504517        sig_on() 
    45514518        mpfr_zeta(x.value, self.value, (<RealField_class>self._parent).rnd) 
Note: See TracChangeset for help on using the changeset viewer.