Ticket #7879: trac_7879-RR-signal.2.rebased_to_4.7.2.alpha2.patch

File trac_7879-RR-signal.2.rebased_to_4.7.2.alpha2.patch, 22.2 KB (added by Leif Leonhardy, 11 years ago)

Sage library patch. Robert's patch rebased to Sage 4.7.2.alpha2, because of fuzz 2.

  • sage/rings/real_mpfr.pyx

    # HG changeset patch
    # User Robert Bradshaw <robertwb@math.washington.edu>
    # Date 1263066099 28800
    # Node ID 925df2316d52179ed2025dcdc46c63120b32c8fe
    # Parent  eb1b6cc7087907589a6592e331a3adfbc78b2014
    Trac #7879: Remove unnecessary signal handling for low prec mpfr operations.
    
    diff --git a/sage/rings/real_mpfr.pyx b/sage/rings/real_mpfr.pyx
    a b  
    167167cdef object numpy_double_interface = {'typestr': '=f8'}
    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#
    172177#       External Python access to constants
     
    810815            sage: R.pi().sqrt()/2
    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
    818822        # mpfr_const_log2, mpfr_const_pi and mpfr_const_euler)", so
     
    822826        # functions, but this free is needed for them too!
    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
    828832
     
    836840            sage: RealField(100).euler_constant()
    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()
    843846        mpfr_const_euler(x.value, self.rnd)
     
    854857            sage: RealField(100).catalan_constant()
    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
    865867    # int mpfr_const_log2 (mpfr_t rop, mp_rnd_t rnd)
     
    877879            0.69314718055994530941723212146
    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       
    886888    def random_element(self, min=-1, max=1, distribution=None):
     
    963965        if n < 0:
    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
    971973    def rounding_mode(self):
     
    18681870            sage: R(-1.5) + R(2.5)
    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
    18751876       
     
    18861887            sage: R(-1.5) - R(2.5)
    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
    18931893       
     
    19211921            sage: parent(b*a)
    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
    19281927   
     
    19451944            sage: R(-1.5) / R(2.5)
    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)
    19521950        return x
     
    19641962            sage: RR('nan')._neg_()
    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
    19711968
     
    20011998            sage: RR('nan').abs()
    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
    20082004
     
    20582054        """
    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
    20652060
     
    22482243             sage: RR(-0.5).round()
    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()
    22552249
     
    23262320            sage: (0.00).trunc()
    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()
    23332326
     
    23802373        else:
    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)
    23872379        mpfr_nexttoward(x.value, other_rn.value)
     
    24062398            '-1.4142135623730949'
    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)
    24132404
     
    24312422            '-1.4142135623730954'
    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)
    24382428
     
    33973387        cdef RealNumber x
    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():
    34053395                    return [x]
     
    34423432            sage: r.cube_root()^3 - r       # illustrates precision loss
    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
    34523441    def __pow(self, RealNumber exponent):
     
    35693558                return self._complex_number_().log(base)
    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:
    35773566            return self.log10()
     
    36103599        if self < 0:
    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
    36183607    def log10(self):
     
    36473636        if self < 0:
    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
    36553644    def log1p(self):
     
    36753664            sage: (1+r100).log()
    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       
    36803681            sage: r = 38.9; r.log1p()
     
    36963697        if self < -1:
    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
    37043705    def exp(self):
     
    37253726            sage: r.exp()
    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)
    37323732        sig_off()       
     
    37543754            sage: r.exp2()
    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
    37643763    def exp10(self):
     
    37833782            sage: r.exp10()
    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
    37933791    def expm1(self):
     
    38093807            sage: r.expm1()
    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
    38193816    def eint(self):
     
    38323829            sage: r.eint()
    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
    38423838    def cos(self):
     
    38493845            sage: t.cos()
    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()       
    38573852        return x
     
    38753870            sage: R(2).sin()
    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)
    38823876        sig_off()
     
    38953889            sage: q.tan()
    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)
    39023895        sig_off()
     
    39353928            sage: i.arccos() == q
    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)
    39423934        sig_off()       
     
    39553947            sage: i.arcsin() - q
    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)
    39623953        sig_off()       
     
    39733964            sage: i.arctan() == q
    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)
    39803970        sig_off()       
     
    39943984            sage: q.cosh()
    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)
    40013990        sig_off()       
     
    40114000            sage: q.sinh()
    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)
    40184006        sig_off()       
     
    40284016            sage: q.tanh()
    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)
    40354022        sig_off()       
     
    40444031            sage: RealField(100)(2).coth()
    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)
    40514037        sig_off()       
     
    40734059            sage: RealField(100)(2).cot()
    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)
    40804065        sig_off()       
     
    40894074            sage: RealField(100)(2).csch()
    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)
    40964080        sig_off()       
     
    41184102            sage: RealField(100)(2).csc()
    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)
    41254108        sig_off()       
     
    41344117            sage: RealField(100)(2).sech()
    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)
    41414123        sig_off()       
     
    41634145            sage: RealField(100)(2).sec()
    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)
    41704151        sig_off()       
     
    41824163            sage: q == i.arccosh()
    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)
    41894169        sig_off()       
     
    42014181            sage: i.arcsinh() - q
    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)
    42084187        sig_off()       
     
    42204199            sage: i.arctanh() - q
    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)
    42274205        sig_off()       
     
    43114289            sage: R(6).erf()
    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)
    43184295        sig_off()
     
    43314308            sage: R(6).erfc()
    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)
    43384314        sig_off()
     
    43484324            sage: R(2).j0()
    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)
    43554330        sig_off()
     
    43654340            sage: R(2).j1()
    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)
    43724346        sig_off()
     
    43854359            sage: R(2).jn(-17)
    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)
    43924365        sig_off()
     
    44024375            sage: R(2).y0()
    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)
    44094381        sig_off()
     
    44194391            sage: R(2).y1()
    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)
    44264397        sig_off()
     
    44394410            sage: R(2).yn(-17)
    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)
    44464416        sig_off()
     
    44584428            sage: R(1.5).gamma()
    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
    44684437    def lngamma(self):
     
    44934462            sage: R(1e10).log_gamma()
    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
    45034471    def zeta(self):
     
    45454513            sage: R(z)
    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)
    45524519        sig_off()