Ticket #7879: 7879-RR-signal.2.patch

File 7879-RR-signal.2.patch, 22.2 KB (added by Robert Bradshaw, 11 years ago)

Rebased on 4.7

  • sage/rings/real_mpfr.pyx

    # HG changeset patch
    # User Robert Bradshaw <robertwb@math.washington.edu>
    # Date 1263066099 28800
    # Node ID 8cdc0dd8ba61b3ecb646dedf14650ab13d7f5405
    # Parent  c8f01838c8d5e7abece0ca915bab4c47b7d5b3da
    Trac #7879: Remove unnecessary signal handling for low prec mpfr operations.
    
    diff -r c8f01838c8d5 -r 8cdc0dd8ba61 sage/rings/real_mpfr.pyx
    a b  
    165165cdef object numpy_double_interface = {'typestr': '=f8'}
    166166cdef object numpy_object_interface = {'typestr': '|O'}
    167167
     168# Avoid signal handling for cheap operations when the
     169# precision is below this threshold.
     170cdef enum:
     171    SIG_PREC_THRESHOLD = 1000
     172
    168173#*****************************************************************************
    169174#
    170175#       External Python access to constants
     
    808813            sage: R.pi().sqrt()/2
    809814            0.88622692545275801364908374167057259139877473
    810815        """
    811         cdef RealNumber x
    812         x = self._new()
    813         sig_on()
     816        cdef RealNumber x = self._new()
     817        if self.__prec > SIG_PREC_THRESHOLD: sig_on()
    814818        # The docs for mpfr_free_cache say "Free the cache used by
    815819        # the functions computing constants if needed (currently
    816820        # mpfr_const_log2, mpfr_const_pi and mpfr_const_euler)", so
     
    820824        # functions, but this free is needed for them too!
    821825        mpfr_free_cache()
    822826        mpfr_const_pi(x.value, self.rnd)
    823         sig_off()
     827        if self.__prec > SIG_PREC_THRESHOLD: sig_off()
    824828        return x
    825829
    826830
     
    834838            sage: RealField(100).euler_constant()
    835839            0.57721566490153286060651209008
    836840        """
    837         cdef RealNumber x
    838         x = self._new()
     841        cdef RealNumber x = self._new()
    839842        sig_on()
    840843        mpfr_free_cache()
    841844        mpfr_const_euler(x.value, self.rnd)
     
    852855            sage: RealField(100).catalan_constant()
    853856            0.91596559417721901505460351493
    854857        """
    855         cdef RealNumber x
    856         x = self._new()
    857         sig_on()
     858        cdef RealNumber x = self._new()
     859        if self.__prec > SIG_PREC_THRESHOLD: sig_on()
    858860        mpfr_free_cache()
    859861        mpfr_const_catalan(x.value, self.rnd)
    860         sig_off()
     862        if self.__prec > SIG_PREC_THRESHOLD: sig_off()
    861863        return x
    862864
    863865    # int mpfr_const_log2 (mpfr_t rop, mp_rnd_t rnd)
     
    875877            0.69314718055994530941723212146
    876878        """
    877879        cdef RealNumber x = self._new()
    878         sig_on()
     880        if self.__prec > SIG_PREC_THRESHOLD: sig_on()
    879881        mpfr_free_cache()
    880882        mpfr_const_log2(x.value, self.rnd)
    881         sig_off()
     883        if self.__prec > SIG_PREC_THRESHOLD: sig_off()
    882884        return x
    883885       
    884886    def random_element(self, min=-1, max=1, distribution=None):
     
    961963        if n < 0:
    962964            raise ArithmeticError, "n must be nonnegative"
    963965        x = self._new()
    964         sig_on()
     966        if self.__prec > SIG_PREC_THRESHOLD and n < SIG_PREC_THRESHOLD: sig_on()
    965967        mpfr_fac_ui(x.value, n, self.rnd)
    966         sig_off()
     968        if self.__prec > SIG_PREC_THRESHOLD and n < SIG_PREC_THRESHOLD: sig_off()
    967969        return x
    968970
    969971    def rounding_mode(self):
     
    18661868            sage: R(-1.5) + R(2.5)
    18671869            1.00000000000000
    18681870        """
    1869         cdef RealNumber x
    1870         x = self._new()
     1871        cdef RealNumber x = self._new()
    18711872        mpfr_add(x.value, self.value, (<RealNumber>other).value, (<RealField_class>self._parent).rnd)
    18721873        return x
    18731874       
     
    18841885            sage: R(-1.5) - R(2.5)
    18851886            -4.00000000000000
    18861887        """
    1887         cdef RealNumber x
    1888         x = self._new()
     1888        cdef RealNumber x = self._new()
    18891889        mpfr_sub(x.value, self.value, (<RealNumber>right).value, (<RealField_class> self._parent).rnd)
    18901890        return x
    18911891       
     
    19191919            sage: parent(b*a)
    19201920            Real Field with 20 bits of precision
    19211921        """
    1922         cdef RealNumber x
    1923         x = self._new()
     1922        cdef RealNumber x = self._new()
    19241923        mpfr_mul(x.value, self.value, (<RealNumber>right).value, (<RealField_class>self._parent).rnd)
    19251924        return x
    19261925   
     
    19431942            sage: R(-1.5) / R(2.5)
    19441943            -0.600000000000000
    19451944        """
    1946         cdef RealNumber x
    1947         x = self._new()
     1945        cdef RealNumber x = self._new()
    19481946        mpfr_div((<RealNumber>x).value, self.value,
    19491947                 (<RealNumber>right).value, (<RealField_class>self._parent).rnd)
    19501948        return x
     
    19621960            sage: RR('nan')._neg_()
    19631961            NaN
    19641962        """
    1965         cdef RealNumber x
    1966         x = self._new()
     1963        cdef RealNumber x = self._new()
    19671964        mpfr_neg(x.value, self.value, (<RealField_class>self._parent).rnd)
    19681965        return x
    19691966
     
    19991996            sage: RR('nan').abs()
    20001997            NaN
    20011998        """
    2002         cdef RealNumber x
    2003         x = self._new()       
     1999        cdef RealNumber x = self._new()       
    20042000        mpfr_abs(x.value, self.value, (<RealField_class>self._parent).rnd)
    20052001        return x
    20062002
     
    20562052        """
    20572053        if n > sys.maxint:
    20582054            raise OverflowError, "n (=%s) must be <= %s"%(n, sys.maxint)
    2059         cdef RealNumber x
    2060         x = self._new()
     2055        cdef RealNumber x = self._new()
    20612056        mpfr_div_2exp(x.value, self.value, n, (<RealField_class>self._parent).rnd)
    20622057        return x
    20632058
     
    22462241             sage: RR(-0.5).round()
    22472242             -1
    22482243         """
    2249         cdef RealNumber x
    2250         x = self._new()
     2244        cdef RealNumber x = self._new()
    22512245        mpfr_round(x.value, self.value)
    22522246        return x.integer_part()
    22532247
     
    23242318            sage: (0.00).trunc()
    23252319            0
    23262320        """
    2327         cdef RealNumber x
    2328         x = self._new()
     2321        cdef RealNumber x = self._new()
    23292322        mpfr_trunc(x.value, self.value)
    23302323        return x.integer_part()
    23312324
     
    23782371        else:
    23792372            other_rn = self._parent(other)
    23802373
    2381         cdef RealNumber x
    2382         x = self._new()
     2374        cdef RealNumber x = self._new()
    23832375       
    23842376        mpfr_set(x.value, self.value, GMP_RNDN)
    23852377        mpfr_nexttoward(x.value, other_rn.value)
     
    24042396            '-1.4142135623730949'
    24052397        """
    24062398
    2407         cdef RealNumber x
    2408         x = self._new()
     2399        cdef RealNumber x = self._new()
    24092400        mpfr_set(x.value, self.value, GMP_RNDN)
    24102401        mpfr_nextabove(x.value)
    24112402
     
    24292420            '-1.4142135623730954'
    24302421        """
    24312422
    2432         cdef RealNumber x
    2433         x = self._new()
     2423        cdef RealNumber x = self._new()
    24342424        mpfr_set(x.value, self.value, GMP_RNDN)
    24352425        mpfr_nextbelow(x.value)
    24362426
     
    33963386        cdef RealNumber x
    33973387        if mpfr_cmp_ui(self.value, 0) >= 0:
    33983388            x = self._new()
    3399             sig_on()               
     3389            if (<RealField_class>self._parent).__prec > 10*SIG_PREC_THRESHOLD: sig_on()
    34003390            mpfr_sqrt(x.value, self.value, (<RealField_class>self._parent).rnd)
    3401             sig_off()
     3391            if (<RealField_class>self._parent).__prec > 10*SIG_PREC_THRESHOLD: sig_off()
    34023392            if all:
    34033393                if x.is_zero():
    34043394                    return [x]
     
    34413431            sage: r.cube_root()^3 - r       # illustrates precision loss
    34423432            -1.42108547152020e-14
    34433433        """
    3444         cdef RealNumber x
    3445         x = self._new()
    3446         sig_on()               
     3434        cdef RealNumber x = self._new()
     3435        if (<RealField_class>self._parent).__prec > 10*SIG_PREC_THRESHOLD: sig_on()
    34473436        mpfr_cbrt(x.value, self.value, (<RealField_class>self._parent).rnd)
    3448         sig_off()       
     3437        if (<RealField_class>self._parent).__prec > 10*SIG_PREC_THRESHOLD: sig_off()
    34493438        return x
    34503439
    34513440    def __pow(self, RealNumber exponent):
     
    35423531                return self._complex_number_().log(base)
    35433532        if base == 'e':
    35443533            x = self._new()
    3545             sig_on()               
     3534            if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on()
    35463535            mpfr_log(x.value, self.value, (<RealField_class>self._parent).rnd)
    3547             sig_off()       
     3536            if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off()
    35483537            return x
    35493538        elif base == 10:
    35503539            return self.log10()
     
    35833572        if self < 0:
    35843573            return self._complex_number_().log(2)
    35853574        x = self._new()
    3586         sig_on()               
     3575        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on()
    35873576        mpfr_log2(x.value, self.value, (<RealField_class>self._parent).rnd)
    3588         sig_off()       
     3577        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off()
    35893578        return x
    35903579
    35913580    def log10(self):
     
    36203609        if self < 0:
    36213610            return self._complex_number_().log(10)
    36223611        x = self._new()
    3623         sig_on()               
     3612        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on()
    36243613        mpfr_log10(x.value, self.value, (<RealField_class>self._parent).rnd)
    3625         sig_off()
     3614        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off()
    36263615        return x
    36273616
    36283617    def log1p(self):
     
    36363625            sage: (r+1).log()
    36373626            2.77258872223978
    36383627       
     3628        For small values, this is more accurate than computing `log(1 + self)`
     3629        directly, as it avoid cancelation issues::
     3630       
     3631            sage: r = 3e-10
     3632            sage: r.log1p()
     3633            2.99999999955000e-10
     3634            sage: (1+r).log()
     3635            3.00000024777111e-10
     3636            sage: r100 = RealField(100)(r)
     3637            sage: (1+r100).log()
     3638            2.9999999995500000000978021372e-10
     3639       
    36393640        ::
    36403641       
    36413642            sage: r = 38.9; r.log1p()
     
    36573658        if self < -1:
    36583659            return (self+1.0)._complex_number_().log()
    36593660        x = self._new()
    3660         sig_on()               
     3661        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on()
    36613662        mpfr_log1p(x.value, self.value, (<RealField_class>self._parent).rnd)
    3662         sig_off()
     3663        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off()
    36633664        return x
    36643665
    36653666    def exp(self):
     
    36863687            sage: r.exp()
    36873688            9.38184458849869e-15
    36883689        """
    3689         cdef RealNumber x
    3690         x = self._new()
     3690        cdef RealNumber x = self._new()
    36913691        sig_on()               
    36923692        mpfr_exp(x.value, self.value, (<RealField_class>self._parent).rnd)
    36933693        sig_off()       
     
    37153715            sage: r.exp2()
    37163716            1.89117248253021e-10
    37173717        """
    3718         cdef RealNumber x
    3719         x = self._new()
    3720         sig_on()               
     3718        cdef RealNumber x = self._new()
     3719        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on()
    37213720        mpfr_exp2(x.value, self.value, (<RealField_class>self._parent).rnd)
    3722         sig_off()       
     3721        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off()
    37233722        return x
    37243723
    37253724    def exp10(self):
     
    37443743            sage: r.exp10()
    37453744            5.01187233627276e-33
    37463745        """
    3747         cdef RealNumber x
    3748         x = self._new()
    3749         sig_on()               
     3746        cdef RealNumber x = self._new()
     3747        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on()
    37503748        mpfr_exp10(x.value, self.value, (<RealField_class>self._parent).rnd)
    3751         sig_off()       
     3749        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off()
    37523750        return x
    37533751
    37543752    def expm1(self):
     
    37703768            sage: r.expm1()
    37713769            1.00000000000000e-16
    37723770        """
    3773         cdef RealNumber x
    3774         x = self._new()
    3775         sig_on()               
     3771        cdef RealNumber x = self._new()
     3772        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on()
    37763773        mpfr_expm1(x.value, self.value, (<RealField_class>self._parent).rnd)
    3777         sig_off()       
     3774        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off()
    37783775        return x
    37793776
    37803777    def eint(self):
     
    37933790            sage: r.eint()
    37943791            NaN
    37953792        """
    3796         cdef RealNumber x
    3797         x = self._new()
    3798         sig_on()               
     3793        cdef RealNumber x = self._new()
     3794        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on()
    37993795        mpfr_eint(x.value, self.value, (<RealField_class>self._parent).rnd)
    3800         sig_off()       
     3796        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on()
    38013797        return x
    38023798
    38033799    def cos(self):
     
    38103806            sage: t.cos()
    38113807            6.12323399573677e-17
    38123808        """
    3813         cdef RealNumber x
    3814         x = self._new()
    3815         sig_on()               
     3809        cdef RealNumber x = self._new()
     3810        sig_on()
    38163811        mpfr_cos(x.value, self.value, (<RealField_class>self._parent).rnd)
    38173812        sig_off()       
    38183813        return x
     
    38363831            sage: R(2).sin()
    38373832            0.90929742682568169539601986591
    38383833        """
    3839         cdef RealNumber x
    3840         x = self._new()
     3834        cdef RealNumber x = self._new()
    38413835        sig_on()               
    38423836        mpfr_sin(x.value, self.value, (<RealField_class>self._parent).rnd)
    38433837        sig_off()
     
    38563850            sage: q.tan()
    38573851            0.577350269189626
    38583852        """
    3859         cdef RealNumber x
    3860         x = self._new()
     3853        cdef RealNumber x = self._new()
    38613854        sig_on()               
    38623855        mpfr_tan(x.value, self.value, (<RealField_class>self._parent).rnd)
    38633856        sig_off()
     
    38963889            sage: i.arccos() == q
    38973890            True
    38983891        """
    3899         cdef RealNumber x
    3900         x = self._new()
     3892        cdef RealNumber x = self._new()
    39013893        sig_on()               
    39023894        mpfr_acos(x.value, self.value, (<RealField_class>self._parent).rnd)
    39033895        sig_off()       
     
    39163908            sage: i.arcsin() - q
    39173909            0.000000000000000
    39183910        """
    3919         cdef RealNumber x
    3920         x = self._new()
     3911        cdef RealNumber x = self._new()
    39213912        sig_on()               
    39223913        mpfr_asin(x.value, self.value, (<RealField_class>self._parent).rnd)
    39233914        sig_off()       
     
    39343925            sage: i.arctan() == q
    39353926            True
    39363927        """
    3937         cdef RealNumber x
    3938         x = self._new()
     3928        cdef RealNumber x = self._new()
    39393929        sig_on()               
    39403930        mpfr_atan(x.value, self.value, (<RealField_class>self._parent).rnd)
    39413931        sig_off()       
     
    39553945            sage: q.cosh()
    39563946            1.03446564009551
    39573947        """
    3958         cdef RealNumber x
    3959         x = self._new()
     3948        cdef RealNumber x = self._new()
    39603949        sig_on()               
    39613950        mpfr_cosh(x.value, self.value, (<RealField_class>self._parent).rnd)
    39623951        sig_off()       
     
    39723961            sage: q.sinh()
    39733962            0.264800227602271
    39743963        """
    3975         cdef RealNumber x
    3976         x = self._new()
     3964        cdef RealNumber x = self._new()
    39773965        sig_on()               
    39783966        mpfr_sinh(x.value, self.value, (<RealField_class>self._parent).rnd)
    39793967        sig_off()       
     
    39893977            sage: q.tanh()
    39903978            0.278079429295850
    39913979        """
    3992         cdef RealNumber x
    3993         x = self._new()
     3980        cdef RealNumber x = self._new()
    39943981        sig_on()               
    39953982        mpfr_tanh(x.value, self.value, (<RealField_class>self._parent).rnd)
    39963983        sig_off()       
     
    40053992            sage: RealField(100)(2).coth()
    40063993            1.0373147207275480958778097648
    40073994        """
    4008         cdef RealNumber x
    4009         x = self._new()
     3995        cdef RealNumber x = self._new()
    40103996        sig_on()               
    40113997        mpfr_coth(x.value, self.value, (<RealField_class>self._parent).rnd)
    40123998        sig_off()       
     
    40344020            sage: RealField(100)(2).cot()
    40354021            -0.45765755436028576375027741043
    40364022        """
    4037         cdef RealNumber x
    4038         x = self._new()
     4023        cdef RealNumber x = self._new()
    40394024        sig_on()               
    40404025        mpfr_cot(x.value, self.value, (<RealField_class>self._parent).rnd)
    40414026        sig_off()       
     
    40504035            sage: RealField(100)(2).csch()
    40514036            0.27572056477178320775835148216
    40524037        """
    4053         cdef RealNumber x
    4054         x = self._new()
     4038        cdef RealNumber x = self._new()
    40554039        sig_on()               
    40564040        mpfr_csch(x.value, self.value, (<RealField_class>self._parent).rnd)
    40574041        sig_off()       
     
    40794063            sage: RealField(100)(2).csc()
    40804064            1.0997501702946164667566973970
    40814065        """
    4082         cdef RealNumber x
    4083         x = self._new()
     4066        cdef RealNumber x = self._new()
    40844067        sig_on()               
    40854068        mpfr_csc(x.value, self.value, (<RealField_class>self._parent).rnd)
    40864069        sig_off()       
     
    40954078            sage: RealField(100)(2).sech()
    40964079            0.26580222883407969212086273982
    40974080        """
    4098         cdef RealNumber x
    4099         x = self._new()
     4081        cdef RealNumber x = self._new()
    41004082        sig_on()               
    41014083        mpfr_sech(x.value, self.value, (<RealField_class>self._parent).rnd)
    41024084        sig_off()       
     
    41244106            sage: RealField(100)(2).sec()
    41254107            -2.4029979617223809897546004014
    41264108        """
    4127         cdef RealNumber x
    4128         x = self._new()
     4109        cdef RealNumber x = self._new()
    41294110        sig_on()               
    41304111        mpfr_sec(x.value, self.value, (<RealField_class>self._parent).rnd)
    41314112        sig_off()       
     
    41434124            sage: q == i.arccosh()
    41444125            True
    41454126        """
    4146         cdef RealNumber x
    4147         x = self._new()
     4127        cdef RealNumber x = self._new()
    41484128        sig_on()               
    41494129        mpfr_acosh(x.value, self.value, (<RealField_class>self._parent).rnd)
    41504130        sig_off()       
     
    41624142            sage: i.arcsinh() - q
    41634143            0.000000000000000
    41644144        """
    4165         cdef RealNumber x
    4166         x = self._new()
     4145        cdef RealNumber x = self._new()
    41674146        sig_on()               
    41684147        mpfr_asinh(x.value, self.value, (<RealField_class>self._parent).rnd)
    41694148        sig_off()       
     
    41814160            sage: i.arctanh() - q
    41824161            0.000000000000000
    41834162        """
    4184         cdef RealNumber x
    4185         x = self._new()
     4163        cdef RealNumber x = self._new()
    41864164        sig_on()       
    41874165        mpfr_atanh(x.value, self.value, (<RealField_class>self._parent).rnd)
    41884166        sig_off()       
     
    42724250            sage: R(6).erf()
    42734251            1.00000000000000
    42744252        """
    4275         cdef RealNumber x
    4276         x = self._new()
     4253        cdef RealNumber x = self._new()
    42774254        sig_on()
    42784255        mpfr_erf(x.value, self.value, (<RealField_class>self._parent).rnd)
    42794256        sig_off()
     
    42924269            sage: R(6).erfc()
    42934270            2.15197367124989e-17
    42944271        """
    4295         cdef RealNumber x
    4296         x = self._new()
     4272        cdef RealNumber x = self._new()
    42974273        sig_on()
    42984274        mpfr_erfc(x.value, self.value, (<RealField_class>self._parent).rnd)
    42994275        sig_off()
     
    43094285            sage: R(2).j0()
    43104286            0.223890779141236
    43114287        """
    4312         cdef RealNumber x
    4313         x = self._new()
     4288        cdef RealNumber x = self._new()
    43144289        sig_on()
    43154290        mpfr_j0(x.value, self.value, (<RealField_class>self._parent).rnd)
    43164291        sig_off()
     
    43264301            sage: R(2).j1()
    43274302            0.576724807756873
    43284303        """
    4329         cdef RealNumber x
    4330         x = self._new()
     4304        cdef RealNumber x = self._new()
    43314305        sig_on()
    43324306        mpfr_j1(x.value, self.value, (<RealField_class>self._parent).rnd)
    43334307        sig_off()
     
    43464320            sage: R(2).jn(-17)
    43474321            -2.65930780516787e-15
    43484322        """
    4349         cdef RealNumber x
    4350         x = self._new()
     4323        cdef RealNumber x = self._new()
    43514324        sig_on()
    43524325        mpfr_jn(x.value, n, self.value, (<RealField_class>self._parent).rnd)
    43534326        sig_off()
     
    43634336            sage: R(2).y0()
    43644337            0.510375672649745
    43654338        """
    4366         cdef RealNumber x
    4367         x = self._new()
     4339        cdef RealNumber x = self._new()
    43684340        sig_on()
    43694341        mpfr_y0(x.value, self.value, (<RealField_class>self._parent).rnd)
    43704342        sig_off()
     
    43804352            sage: R(2).y1()
    43814353            -0.107032431540938
    43824354        """
    4383         cdef RealNumber x
    4384         x = self._new()
     4355        cdef RealNumber x = self._new()
    43854356        sig_on()
    43864357        mpfr_y1(x.value, self.value, (<RealField_class>self._parent).rnd)
    43874358        sig_off()
     
    44004371            sage: R(2).yn(-17)
    44014372            7.09038821729481e12
    44024373        """
    4403         cdef RealNumber x
    4404         x = self._new()
     4374        cdef RealNumber x = self._new()
    44054375        sig_on()
    44064376        mpfr_yn(x.value, n, self.value, (<RealField_class>self._parent).rnd)
    44074377        sig_off()
     
    44194389            sage: R(1.5).gamma()
    44204390            0.886226925452758
    44214391        """
    4422         cdef RealNumber x
    4423         x = self._new()
    4424         sig_on()
     4392        cdef RealNumber x = self._new()
     4393        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on()
    44254394        mpfr_gamma(x.value, self.value, (<RealField_class>self._parent).rnd)
    4426         sig_off()
     4395        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off()
    44274396        return x
    44284397
    44294398    def lngamma(self):
     
    44544423            sage: R(1e10).log_gamma()
    44554424            2.20258509288811e11
    44564425        """
    4457         cdef RealNumber x
    4458         x = self._new()
    4459         sig_on()
     4426        cdef RealNumber x = self._new()
     4427        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_on()
    44604428        mpfr_lngamma(x.value, self.value, (<RealField_class>self._parent).rnd)
    4461         sig_off()
     4429        if (<RealField_class>self._parent).__prec > SIG_PREC_THRESHOLD: sig_off()
    44624430        return x
    44634431
    44644432    def zeta(self):
     
    45064474            sage: R(z)
    45074475            1.64493406684823
    45084476        """
    4509         cdef RealNumber x
    4510         x = self._new()
     4477        cdef RealNumber x = self._new()
    45114478        sig_on()
    45124479        mpfr_zeta(x.value, self.value, (<RealField_class>self._parent).rnd)
    45134480        sig_off()