texlive[65526] Build/source/libs: mpfr 4.2.0
commits+kakuto at tug.org
commits+kakuto at tug.org
Thu Jan 12 05:40:09 CET 2023
Revision: 65526
http://tug.org/svn/texlive?view=revision&revision=65526
Author: kakuto
Date: 2023-01-12 05:40:09 +0100 (Thu, 12 Jan 2023)
Log Message:
-----------
mpfr 4.2.0
Modified Paths:
--------------
trunk/Build/source/libs/README
trunk/Build/source/libs/mpfr/ChangeLog
trunk/Build/source/libs/mpfr/Makefile.am
trunk/Build/source/libs/mpfr/Makefile.in
trunk/Build/source/libs/mpfr/TLpatches/ChangeLog
trunk/Build/source/libs/mpfr/TLpatches/TL-Changes
trunk/Build/source/libs/mpfr/TLpatches/patch-01-TL
trunk/Build/source/libs/mpfr/configure
trunk/Build/source/libs/mpfr/mpfr-src/BUGS
trunk/Build/source/libs/mpfr/mpfr-src/ChangeLog
trunk/Build/source/libs/mpfr/mpfr-src/INSTALL
trunk/Build/source/libs/mpfr/mpfr-src/Makefile.am
trunk/Build/source/libs/mpfr/mpfr-src/NEWS
trunk/Build/source/libs/mpfr/mpfr-src/README
trunk/Build/source/libs/mpfr/mpfr-src/TODO
trunk/Build/source/libs/mpfr/mpfr-src/VERSION
trunk/Build/source/libs/mpfr/mpfr-src/acinclude.m4
trunk/Build/source/libs/mpfr/mpfr-src/configure.ac
trunk/Build/source/libs/mpfr/mpfr-src/src/Makefile.am
trunk/Build/source/libs/mpfr/mpfr-src/src/abort_prec_max.c
trunk/Build/source/libs/mpfr/mpfr-src/src/acos.c
trunk/Build/source/libs/mpfr/mpfr-src/src/acosh.c
trunk/Build/source/libs/mpfr/mpfr-src/src/add.c
trunk/Build/source/libs/mpfr/mpfr-src/src/add1.c
trunk/Build/source/libs/mpfr/mpfr-src/src/add1sp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/add1sp1_extracted.c
trunk/Build/source/libs/mpfr/mpfr-src/src/add_d.c
trunk/Build/source/libs/mpfr/mpfr-src/src/add_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/agm.c
trunk/Build/source/libs/mpfr/mpfr-src/src/ai.c
trunk/Build/source/libs/mpfr/mpfr-src/src/amd/mparam.h
trunk/Build/source/libs/mpfr/mpfr-src/src/arm/mparam.h
trunk/Build/source/libs/mpfr/mpfr-src/src/asin.c
trunk/Build/source/libs/mpfr/mpfr-src/src/asinh.c
trunk/Build/source/libs/mpfr/mpfr-src/src/atan.c
trunk/Build/source/libs/mpfr/mpfr-src/src/atan2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/atanh.c
trunk/Build/source/libs/mpfr/mpfr-src/src/bernoulli.c
trunk/Build/source/libs/mpfr/mpfr-src/src/beta.c
trunk/Build/source/libs/mpfr/mpfr-src/src/buildopt.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cache.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cbrt.c
trunk/Build/source/libs/mpfr/mpfr-src/src/check.c
trunk/Build/source/libs/mpfr/mpfr-src/src/clear.c
trunk/Build/source/libs/mpfr/mpfr-src/src/clears.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cmp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cmp2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_d.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_ld.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_si.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cmpabs.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cmpabs_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/comparisons.c
trunk/Build/source/libs/mpfr/mpfr-src/src/const_catalan.c
trunk/Build/source/libs/mpfr/mpfr-src/src/const_euler.c
trunk/Build/source/libs/mpfr/mpfr-src/src/const_log2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/const_pi.c
trunk/Build/source/libs/mpfr/mpfr-src/src/constant.c
trunk/Build/source/libs/mpfr/mpfr-src/src/copysign.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cos.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cosh.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cot.c
trunk/Build/source/libs/mpfr/mpfr-src/src/coth.c
trunk/Build/source/libs/mpfr/mpfr-src/src/csc.c
trunk/Build/source/libs/mpfr/mpfr-src/src/csch.c
trunk/Build/source/libs/mpfr/mpfr-src/src/d_div.c
trunk/Build/source/libs/mpfr/mpfr-src/src/d_sub.c
trunk/Build/source/libs/mpfr/mpfr-src/src/digamma.c
trunk/Build/source/libs/mpfr/mpfr-src/src/dim.c
trunk/Build/source/libs/mpfr/mpfr-src/src/div.c
trunk/Build/source/libs/mpfr/mpfr-src/src/div_2exp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/div_2si.c
trunk/Build/source/libs/mpfr/mpfr-src/src/div_2ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/div_d.c
trunk/Build/source/libs/mpfr/mpfr-src/src/div_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/dot.c
trunk/Build/source/libs/mpfr/mpfr-src/src/dump.c
trunk/Build/source/libs/mpfr/mpfr-src/src/eint.c
trunk/Build/source/libs/mpfr/mpfr-src/src/eq.c
trunk/Build/source/libs/mpfr/mpfr-src/src/erandom.c
trunk/Build/source/libs/mpfr/mpfr-src/src/erf.c
trunk/Build/source/libs/mpfr/mpfr-src/src/erfc.c
trunk/Build/source/libs/mpfr/mpfr-src/src/exceptions.c
trunk/Build/source/libs/mpfr/mpfr-src/src/exp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/exp10.c
trunk/Build/source/libs/mpfr/mpfr-src/src/exp2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/exp3.c
trunk/Build/source/libs/mpfr/mpfr-src/src/exp_2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/expm1.c
trunk/Build/source/libs/mpfr/mpfr-src/src/extract.c
trunk/Build/source/libs/mpfr/mpfr-src/src/factorial.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fits_intmax.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fits_s.h
trunk/Build/source/libs/mpfr/mpfr-src/src/fits_sint.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fits_slong.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fits_sshort.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fits_u.h
trunk/Build/source/libs/mpfr/mpfr-src/src/fits_uint.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fits_uintmax.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fits_ulong.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fits_ushort.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fma.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fmma.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fms.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fpif.c
trunk/Build/source/libs/mpfr/mpfr-src/src/frac.c
trunk/Build/source/libs/mpfr/mpfr-src/src/free_cache.c
trunk/Build/source/libs/mpfr/mpfr-src/src/frexp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/gamma.c
trunk/Build/source/libs/mpfr/mpfr-src/src/gamma_inc.c
trunk/Build/source/libs/mpfr/mpfr-src/src/gammaonethird.c
trunk/Build/source/libs/mpfr/mpfr-src/src/gen_inverse.h
trunk/Build/source/libs/mpfr/mpfr-src/src/generic/coverage/mparam.h
trunk/Build/source/libs/mpfr/mpfr-src/src/generic/mparam.h
trunk/Build/source/libs/mpfr/mpfr-src/src/get_d.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_d128.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_d64.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_exp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_f.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_float128.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_flt.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_ld.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_q.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_si.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_sj.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_str.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_uj.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_z.c
trunk/Build/source/libs/mpfr/mpfr-src/src/gmp_op.c
trunk/Build/source/libs/mpfr/mpfr-src/src/grandom.c
trunk/Build/source/libs/mpfr/mpfr-src/src/hypot.c
trunk/Build/source/libs/mpfr/mpfr-src/src/ieee_floats.h
trunk/Build/source/libs/mpfr/mpfr-src/src/init.c
trunk/Build/source/libs/mpfr/mpfr-src/src/init2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/inits.c
trunk/Build/source/libs/mpfr/mpfr-src/src/inits2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/inp_str.c
trunk/Build/source/libs/mpfr/mpfr-src/src/int_ceil_log2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/invert_limb.h
trunk/Build/source/libs/mpfr/mpfr-src/src/invsqrt_limb.h
trunk/Build/source/libs/mpfr/mpfr-src/src/isinf.c
trunk/Build/source/libs/mpfr/mpfr-src/src/isinteger.c
trunk/Build/source/libs/mpfr/mpfr-src/src/isnan.c
trunk/Build/source/libs/mpfr/mpfr-src/src/isnum.c
trunk/Build/source/libs/mpfr/mpfr-src/src/isqrt.c
trunk/Build/source/libs/mpfr/mpfr-src/src/isregular.c
trunk/Build/source/libs/mpfr/mpfr-src/src/iszero.c
trunk/Build/source/libs/mpfr/mpfr-src/src/jn.c
trunk/Build/source/libs/mpfr/mpfr-src/src/jyn_asympt.c
trunk/Build/source/libs/mpfr/mpfr-src/src/li2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/lngamma.c
trunk/Build/source/libs/mpfr/mpfr-src/src/log.c
trunk/Build/source/libs/mpfr/mpfr-src/src/log10.c
trunk/Build/source/libs/mpfr/mpfr-src/src/log1p.c
trunk/Build/source/libs/mpfr/mpfr-src/src/log2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/log_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/logging.c
trunk/Build/source/libs/mpfr/mpfr-src/src/min_prec.c
trunk/Build/source/libs/mpfr/mpfr-src/src/minmax.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mips/mparam.h
trunk/Build/source/libs/mpfr/mpfr-src/src/modf.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mp_clz_tab.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mparam_h.in
trunk/Build/source/libs/mpfr/mpfr-src/src/mpf2mpfr.h
trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-cvers.h
trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-gmp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-gmp.h
trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-impl.h
trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-intmax.h
trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-longlong.h
trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-mini-gmp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-mini-gmp.h
trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-sassert.h
trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-thread.h
trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr.h
trunk/Build/source/libs/mpfr/mpfr-src/src/mpn_exp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mul.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mul_1_extracted.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2exp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2si.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mul_d.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mul_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/mulders.c
trunk/Build/source/libs/mpfr/mpfr-src/src/nbits_ulong.c
trunk/Build/source/libs/mpfr/mpfr-src/src/neg.c
trunk/Build/source/libs/mpfr/mpfr-src/src/next.c
trunk/Build/source/libs/mpfr/mpfr-src/src/nrandom.c
trunk/Build/source/libs/mpfr/mpfr-src/src/odd_p.c
trunk/Build/source/libs/mpfr/mpfr-src/src/out_str.c
trunk/Build/source/libs/mpfr/mpfr-src/src/pool.c
trunk/Build/source/libs/mpfr/mpfr-src/src/pow.c
trunk/Build/source/libs/mpfr/mpfr-src/src/pow_si.c
trunk/Build/source/libs/mpfr/mpfr-src/src/pow_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/pow_z.c
trunk/Build/source/libs/mpfr/mpfr-src/src/powerof2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/powerpc64/mparam.h
trunk/Build/source/libs/mpfr/mpfr-src/src/print_raw.c
trunk/Build/source/libs/mpfr/mpfr-src/src/print_rnd_mode.c
trunk/Build/source/libs/mpfr/mpfr-src/src/printf.c
trunk/Build/source/libs/mpfr/mpfr-src/src/random_deviate.c
trunk/Build/source/libs/mpfr/mpfr-src/src/random_deviate.h
trunk/Build/source/libs/mpfr/mpfr-src/src/rec_sqrt.c
trunk/Build/source/libs/mpfr/mpfr-src/src/reldiff.c
trunk/Build/source/libs/mpfr/mpfr-src/src/rem1.c
trunk/Build/source/libs/mpfr/mpfr-src/src/rint.c
trunk/Build/source/libs/mpfr/mpfr-src/src/rndna.c
trunk/Build/source/libs/mpfr/mpfr-src/src/root.c
trunk/Build/source/libs/mpfr/mpfr-src/src/round_near_x.c
trunk/Build/source/libs/mpfr/mpfr-src/src/round_p.c
trunk/Build/source/libs/mpfr/mpfr-src/src/round_prec.c
trunk/Build/source/libs/mpfr/mpfr-src/src/round_raw_generic.c
trunk/Build/source/libs/mpfr/mpfr-src/src/scale2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sec.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sech.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_d.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_d128.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_d64.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_dfl_prec.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_exp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_f.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_float128.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_flt.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_inf.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_ld.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_nan.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_prc_raw.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_prec.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_q.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_rnd.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_si.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_si_2exp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_sj.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_str.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_str_raw.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_ui_2exp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_uj.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_z.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_zero.c
trunk/Build/source/libs/mpfr/mpfr-src/src/setmax.c
trunk/Build/source/libs/mpfr/mpfr-src/src/setmin.c
trunk/Build/source/libs/mpfr/mpfr-src/src/setsign.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sgn.c
trunk/Build/source/libs/mpfr/mpfr-src/src/si_op.c
trunk/Build/source/libs/mpfr/mpfr-src/src/signbit.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sin.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sin_cos.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sinh.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sinh_cosh.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sparc64/mparam.h
trunk/Build/source/libs/mpfr/mpfr-src/src/sqr.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sqrt.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sqrt_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/stack_interface.c
trunk/Build/source/libs/mpfr/mpfr-src/src/strtofr.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sub.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sub1.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sub1sp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sub1sp1_extracted.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sub_d.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sub_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/subnormal.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sum.c
trunk/Build/source/libs/mpfr/mpfr-src/src/swap.c
trunk/Build/source/libs/mpfr/mpfr-src/src/tan.c
trunk/Build/source/libs/mpfr/mpfr-src/src/tanh.c
trunk/Build/source/libs/mpfr/mpfr-src/src/total_order.c
trunk/Build/source/libs/mpfr/mpfr-src/src/ubf.c
trunk/Build/source/libs/mpfr/mpfr-src/src/uceil_exp2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/uceil_log2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/ufloor_log2.c
trunk/Build/source/libs/mpfr/mpfr-src/src/ui_div.c
trunk/Build/source/libs/mpfr/mpfr-src/src/ui_pow.c
trunk/Build/source/libs/mpfr/mpfr-src/src/ui_pow_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/ui_sub.c
trunk/Build/source/libs/mpfr/mpfr-src/src/urandom.c
trunk/Build/source/libs/mpfr/mpfr-src/src/urandomb.c
trunk/Build/source/libs/mpfr/mpfr-src/src/vasprintf.c
trunk/Build/source/libs/mpfr/mpfr-src/src/version.c
trunk/Build/source/libs/mpfr/mpfr-src/src/volatile.c
trunk/Build/source/libs/mpfr/mpfr-src/src/x86/mparam.h
trunk/Build/source/libs/mpfr/mpfr-src/src/x86_64/core2/mparam.h
trunk/Build/source/libs/mpfr/mpfr-src/src/x86_64/mparam.h
trunk/Build/source/libs/mpfr/mpfr-src/src/yn.c
trunk/Build/source/libs/mpfr/mpfr-src/src/zeta.c
trunk/Build/source/libs/mpfr/mpfr-src/src/zeta_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/version-ext.sh
trunk/Build/source/libs/mpfr/version.ac
Added Paths:
-----------
trunk/Build/source/libs/mpfr/mpfr-src/src/acosu.c
trunk/Build/source/libs/mpfr/mpfr-src/src/asinu.c
trunk/Build/source/libs/mpfr/mpfr-src/src/atan2u.c
trunk/Build/source/libs/mpfr/mpfr-src/src/atanu.c
trunk/Build/source/libs/mpfr/mpfr-src/src/compound.c
trunk/Build/source/libs/mpfr/mpfr-src/src/cosu.c
trunk/Build/source/libs/mpfr/mpfr-src/src/exp10m1.c
trunk/Build/source/libs/mpfr/mpfr-src/src/exp2m1.c
trunk/Build/source/libs/mpfr/mpfr-src/src/fmod_ui.c
trunk/Build/source/libs/mpfr/mpfr-src/src/get_z_2exp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/log10p1.c
trunk/Build/source/libs/mpfr/mpfr-src/src/log2p1.c
trunk/Build/source/libs/mpfr/mpfr-src/src/pow_sj.c
trunk/Build/source/libs/mpfr/mpfr-src/src/pow_uj.c
trunk/Build/source/libs/mpfr/mpfr-src/src/powr.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_z_2exp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/sinu.c
trunk/Build/source/libs/mpfr/mpfr-src/src/tanu.c
Removed Paths:
-------------
trunk/Build/source/libs/mpfr/mpfr-src/src/get_z_exp.c
trunk/Build/source/libs/mpfr/mpfr-src/src/set_z_exp.c
Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/README 2023-01-12 04:40:09 UTC (rev 65526)
@@ -46,7 +46,7 @@
luajit 2.1.0-beta3 - checked 20jun17
http://luajit.org/download/LuaJIT-2.1.0-beta3.tar.gz
-mpfr 4.1.1 - checked 18nov22
+mpfr 4.2.0 - checked 12jan23
http://ftp.gnu.org/gnu/mpfr/
pixman 0.42.2 - checked 03nov22
Modified: trunk/Build/source/libs/mpfr/ChangeLog
===================================================================
--- trunk/Build/source/libs/mpfr/ChangeLog 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/ChangeLog 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,3 +1,8 @@
+2023-01-12 Akira Kakuto <kakuto at jcom.zaq.ne.jp>
+
+ Import mpfr-4.2.0.
+ * version.ac, Makefile.am: Adjust.
+
2022-11-18 Akira Kakuto <kakuto at jcom.zaq.ne.jp>
Import mpfr-4.1.1.
Modified: trunk/Build/source/libs/mpfr/Makefile.am
===================================================================
--- trunk/Build/source/libs/mpfr/Makefile.am 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/Makefile.am 2023-01-12 04:40:09 UTC (rev 65526)
@@ -71,7 +71,7 @@
@MPFR_TREE@/src/get_si.c \
@MPFR_TREE@/src/get_str.c \
@MPFR_TREE@/src/get_z.c \
- @MPFR_TREE@/src/get_z_exp.c \
+ @MPFR_TREE@/src/get_z_2exp.c \
@MPFR_TREE@/src/get_ui.c \
@MPFR_TREE@/src/gmp_op.c \
@MPFR_TREE@/src/init.c \
@@ -113,7 +113,7 @@
@MPFR_TREE@/src/set_str.c \
@MPFR_TREE@/src/set_ui_2exp.c \
@MPFR_TREE@/src/set_z.c \
- @MPFR_TREE@/src/set_z_exp.c \
+ @MPFR_TREE@/src/set_z_2exp.c \
@MPFR_TREE@/src/set_zero.c \
@MPFR_TREE@/src/setmax.c \
@MPFR_TREE@/src/setmin.c \
@@ -138,10 +138,14 @@
unused_sources = \
@MPFR_TREE@/src/acos.c \
@MPFR_TREE@/src/acosh.c \
+ @MPFR_TREE@/src/acosu.c \
@MPFR_TREE@/src/ai.c \
@MPFR_TREE@/src/asin.c \
+ @MPFR_TREE@/src/asinu.c \
@MPFR_TREE@/src/asinh.c \
@MPFR_TREE@/src/atanh.c \
+ @MPFR_TREE@/src/atan2u.c \
+ @MPFR_TREE@/src/atanu.c \
@MPFR_TREE@/src/bernoulli.c \
@MPFR_TREE@/src/beta.c \
@MPFR_TREE@/src/buildopt.c \
@@ -150,8 +154,10 @@
@MPFR_TREE@/src/cmp_d.c \
@MPFR_TREE@/src/cmp_ld.c \
@MPFR_TREE@/src/cmpabs_ui.c \
+ @MPFR_TREE@/src/compound.c \
@MPFR_TREE@/src/copysign.c \
@MPFR_TREE@/src/cosh.c \
+ @MPFR_TREE@/src/cosu.c \
@MPFR_TREE@/src/cot.c \
@MPFR_TREE@/src/coth.c \
@MPFR_TREE@/src/csc.c \
@@ -170,6 +176,8 @@
@MPFR_TREE@/src/erf.c \
@MPFR_TREE@/src/erfc.c \
@MPFR_TREE@/src/exp10.c \
+ @MPFR_TREE@/src/exp10m1.c \
+ @MPFR_TREE@/src/exp2m1.c \
@MPFR_TREE@/src/expm1.c \
@MPFR_TREE@/src/factorial.c \
@MPFR_TREE@/src/fits_intmax.c \
@@ -179,6 +187,7 @@
@MPFR_TREE@/src/fits_ushort.c \
@MPFR_TREE@/src/fma.c \
@MPFR_TREE@/src/fmma.c \
+ @MPFR_TREE@/src/fmod_ui.c \
@MPFR_TREE@/src/fms.c \
@MPFR_TREE@/src/fpif.c \
@MPFR_TREE@/src/frac.c \
@@ -207,6 +216,8 @@
@MPFR_TREE@/src/iszero.c \
@MPFR_TREE@/src/jn.c \
@MPFR_TREE@/src/li2.c \
+ @MPFR_TREE@/src/log10p1.c \
+ @MPFR_TREE@/src/log2p1.c \
@MPFR_TREE@/src/lngamma.c \
@MPFR_TREE@/src/log10.c \
@MPFR_TREE@/src/log1p.c \
@@ -227,6 +238,9 @@
@MPFR_TREE@/src/pow_ui.c \
@MPFR_TREE@/src/pow_z.c \
@MPFR_TREE@/src/print_raw.c \
+ @MPFR_TREE@/src/powr.c \
+ @MPFR_TREE@/src/pow_sj.c \
+ @MPFR_TREE@/src/pow_uj.c \
@MPFR_TREE@/src/print_rnd_mode.c \
@MPFR_TREE@/src/printf.c \
@MPFR_TREE@/src/random_deviate.c \
@@ -253,6 +267,7 @@
@MPFR_TREE@/src/setsign.c \
@MPFR_TREE@/src/signbit.c \
@MPFR_TREE@/src/sinh.c \
+ @MPFR_TREE@/src/sinu.c \
@MPFR_TREE@/src/sinh_cosh.c \
@MPFR_TREE@/src/stack_interface.c \
@MPFR_TREE@/src/sub_d.c \
@@ -261,6 +276,7 @@
@MPFR_TREE@/src/sum.c \
@MPFR_TREE@/src/tan.c \
@MPFR_TREE@/src/tanh.c \
+ @MPFR_TREE@/src/tanu.c \
@MPFR_TREE@/src/total_order.c \
@MPFR_TREE@/src/uceil_exp2.c \
@MPFR_TREE@/src/uceil_log2.c \
Modified: trunk/Build/source/libs/mpfr/Makefile.in
===================================================================
--- trunk/Build/source/libs/mpfr/Makefile.in 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/Makefile.in 2023-01-12 04:40:09 UTC (rev 65526)
@@ -157,7 +157,7 @@
@MPFR_TREE@/src/get_si.$(OBJEXT) \
@MPFR_TREE@/src/get_str.$(OBJEXT) \
@MPFR_TREE@/src/get_z.$(OBJEXT) \
- @MPFR_TREE@/src/get_z_exp.$(OBJEXT) \
+ @MPFR_TREE@/src/get_z_2exp.$(OBJEXT) \
@MPFR_TREE@/src/get_ui.$(OBJEXT) \
@MPFR_TREE@/src/gmp_op.$(OBJEXT) \
@MPFR_TREE@/src/init.$(OBJEXT) @MPFR_TREE@/src/init2.$(OBJEXT) \
@@ -194,7 +194,7 @@
@MPFR_TREE@/src/set_str.$(OBJEXT) \
@MPFR_TREE@/src/set_ui_2exp.$(OBJEXT) \
@MPFR_TREE@/src/set_z.$(OBJEXT) \
- @MPFR_TREE@/src/set_z_exp.$(OBJEXT) \
+ @MPFR_TREE@/src/set_z_2exp.$(OBJEXT) \
@MPFR_TREE@/src/set_zero.$(OBJEXT) \
@MPFR_TREE@/src/setmax.$(OBJEXT) \
@MPFR_TREE@/src/setmin.$(OBJEXT) @MPFR_TREE@/src/sgn.$(OBJEXT) \
@@ -277,7 +277,7 @@
@MPFR_TREE@/src/$(DEPDIR)/get_str.Po \
@MPFR_TREE@/src/$(DEPDIR)/get_ui.Po \
@MPFR_TREE@/src/$(DEPDIR)/get_z.Po \
- @MPFR_TREE@/src/$(DEPDIR)/get_z_exp.Po \
+ @MPFR_TREE@/src/$(DEPDIR)/get_z_2exp.Po \
@MPFR_TREE@/src/$(DEPDIR)/gmp_op.Po \
@MPFR_TREE@/src/$(DEPDIR)/init.Po \
@MPFR_TREE@/src/$(DEPDIR)/init2.Po \
@@ -318,7 +318,7 @@
@MPFR_TREE@/src/$(DEPDIR)/set_str.Po \
@MPFR_TREE@/src/$(DEPDIR)/set_ui_2exp.Po \
@MPFR_TREE@/src/$(DEPDIR)/set_z.Po \
- @MPFR_TREE@/src/$(DEPDIR)/set_z_exp.Po \
+ @MPFR_TREE@/src/$(DEPDIR)/set_z_2exp.Po \
@MPFR_TREE@/src/$(DEPDIR)/set_zero.Po \
@MPFR_TREE@/src/$(DEPDIR)/setmax.Po \
@MPFR_TREE@/src/$(DEPDIR)/setmin.Po \
@@ -822,7 +822,7 @@
@MPFR_TREE@/src/get_si.c \
@MPFR_TREE@/src/get_str.c \
@MPFR_TREE@/src/get_z.c \
- @MPFR_TREE@/src/get_z_exp.c \
+ @MPFR_TREE@/src/get_z_2exp.c \
@MPFR_TREE@/src/get_ui.c \
@MPFR_TREE@/src/gmp_op.c \
@MPFR_TREE@/src/init.c \
@@ -864,7 +864,7 @@
@MPFR_TREE@/src/set_str.c \
@MPFR_TREE@/src/set_ui_2exp.c \
@MPFR_TREE@/src/set_z.c \
- @MPFR_TREE@/src/set_z_exp.c \
+ @MPFR_TREE@/src/set_z_2exp.c \
@MPFR_TREE@/src/set_zero.c \
@MPFR_TREE@/src/setmax.c \
@MPFR_TREE@/src/setmin.c \
@@ -889,10 +889,14 @@
unused_sources = \
@MPFR_TREE@/src/acos.c \
@MPFR_TREE@/src/acosh.c \
+ @MPFR_TREE@/src/acosu.c \
@MPFR_TREE@/src/ai.c \
@MPFR_TREE@/src/asin.c \
+ @MPFR_TREE@/src/asinu.c \
@MPFR_TREE@/src/asinh.c \
@MPFR_TREE@/src/atanh.c \
+ @MPFR_TREE@/src/atan2u.c \
+ @MPFR_TREE@/src/atanu.c \
@MPFR_TREE@/src/bernoulli.c \
@MPFR_TREE@/src/beta.c \
@MPFR_TREE@/src/buildopt.c \
@@ -901,8 +905,10 @@
@MPFR_TREE@/src/cmp_d.c \
@MPFR_TREE@/src/cmp_ld.c \
@MPFR_TREE@/src/cmpabs_ui.c \
+ @MPFR_TREE@/src/compound.c \
@MPFR_TREE@/src/copysign.c \
@MPFR_TREE@/src/cosh.c \
+ @MPFR_TREE@/src/cosu.c \
@MPFR_TREE@/src/cot.c \
@MPFR_TREE@/src/coth.c \
@MPFR_TREE@/src/csc.c \
@@ -921,6 +927,8 @@
@MPFR_TREE@/src/erf.c \
@MPFR_TREE@/src/erfc.c \
@MPFR_TREE@/src/exp10.c \
+ @MPFR_TREE@/src/exp10m1.c \
+ @MPFR_TREE@/src/exp2m1.c \
@MPFR_TREE@/src/expm1.c \
@MPFR_TREE@/src/factorial.c \
@MPFR_TREE@/src/fits_intmax.c \
@@ -930,6 +938,7 @@
@MPFR_TREE@/src/fits_ushort.c \
@MPFR_TREE@/src/fma.c \
@MPFR_TREE@/src/fmma.c \
+ @MPFR_TREE@/src/fmod_ui.c \
@MPFR_TREE@/src/fms.c \
@MPFR_TREE@/src/fpif.c \
@MPFR_TREE@/src/frac.c \
@@ -958,6 +967,8 @@
@MPFR_TREE@/src/iszero.c \
@MPFR_TREE@/src/jn.c \
@MPFR_TREE@/src/li2.c \
+ @MPFR_TREE@/src/log10p1.c \
+ @MPFR_TREE@/src/log2p1.c \
@MPFR_TREE@/src/lngamma.c \
@MPFR_TREE@/src/log10.c \
@MPFR_TREE@/src/log1p.c \
@@ -978,6 +989,9 @@
@MPFR_TREE@/src/pow_ui.c \
@MPFR_TREE@/src/pow_z.c \
@MPFR_TREE@/src/print_raw.c \
+ @MPFR_TREE@/src/powr.c \
+ @MPFR_TREE@/src/pow_sj.c \
+ @MPFR_TREE@/src/pow_uj.c \
@MPFR_TREE@/src/print_rnd_mode.c \
@MPFR_TREE@/src/printf.c \
@MPFR_TREE@/src/random_deviate.c \
@@ -1004,6 +1018,7 @@
@MPFR_TREE@/src/setsign.c \
@MPFR_TREE@/src/signbit.c \
@MPFR_TREE@/src/sinh.c \
+ @MPFR_TREE@/src/sinu.c \
@MPFR_TREE@/src/sinh_cosh.c \
@MPFR_TREE@/src/stack_interface.c \
@MPFR_TREE@/src/sub_d.c \
@@ -1012,6 +1027,7 @@
@MPFR_TREE@/src/sum.c \
@MPFR_TREE@/src/tan.c \
@MPFR_TREE@/src/tanh.c \
+ @MPFR_TREE@/src/tanu.c \
@MPFR_TREE@/src/total_order.c \
@MPFR_TREE@/src/uceil_exp2.c \
@MPFR_TREE@/src/uceil_log2.c \
@@ -1194,7 +1210,7 @@
@MPFR_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@MPFR_TREE@/src/get_z.$(OBJEXT): @MPFR_TREE@/src/$(am__dirstamp) \
@MPFR_TREE@/src/$(DEPDIR)/$(am__dirstamp)
- at MPFR_TREE@/src/get_z_exp.$(OBJEXT): @MPFR_TREE@/src/$(am__dirstamp) \
+ at MPFR_TREE@/src/get_z_2exp.$(OBJEXT): @MPFR_TREE@/src/$(am__dirstamp) \
@MPFR_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@MPFR_TREE@/src/get_ui.$(OBJEXT): @MPFR_TREE@/src/$(am__dirstamp) \
@MPFR_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@@ -1283,7 +1299,7 @@
@MPFR_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@MPFR_TREE@/src/set_z.$(OBJEXT): @MPFR_TREE@/src/$(am__dirstamp) \
@MPFR_TREE@/src/$(DEPDIR)/$(am__dirstamp)
- at MPFR_TREE@/src/set_z_exp.$(OBJEXT): @MPFR_TREE@/src/$(am__dirstamp) \
+ at MPFR_TREE@/src/set_z_2exp.$(OBJEXT): @MPFR_TREE@/src/$(am__dirstamp) \
@MPFR_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@MPFR_TREE@/src/set_zero.$(OBJEXT): @MPFR_TREE@/src/$(am__dirstamp) \
@MPFR_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@@ -1386,7 +1402,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/get_str.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/get_ui.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/get_z.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/get_z_exp.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/get_z_2exp.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/gmp_op.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/init.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/init2.Po at am__quote@ # am--include-marker
@@ -1427,7 +1443,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/set_str.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/set_ui_2exp.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/set_z.Po at am__quote@ # am--include-marker
- at AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/set_z_exp.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/set_z_2exp.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/set_zero.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/setmax.Po at am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@@MPFR_TREE@/src/$(DEPDIR)/setmin.Po at am__quote@ # am--include-marker
@@ -2042,7 +2058,7 @@
-rm -f @MPFR_TREE@/src/$(DEPDIR)/get_str.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/get_ui.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/get_z.Po
- -rm -f @MPFR_TREE@/src/$(DEPDIR)/get_z_exp.Po
+ -rm -f @MPFR_TREE@/src/$(DEPDIR)/get_z_2exp.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/gmp_op.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/init.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/init2.Po
@@ -2083,7 +2099,7 @@
-rm -f @MPFR_TREE@/src/$(DEPDIR)/set_str.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/set_ui_2exp.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/set_z.Po
- -rm -f @MPFR_TREE@/src/$(DEPDIR)/set_z_exp.Po
+ -rm -f @MPFR_TREE@/src/$(DEPDIR)/set_z_2exp.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/set_zero.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/setmax.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/setmin.Po
@@ -2195,7 +2211,7 @@
-rm -f @MPFR_TREE@/src/$(DEPDIR)/get_str.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/get_ui.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/get_z.Po
- -rm -f @MPFR_TREE@/src/$(DEPDIR)/get_z_exp.Po
+ -rm -f @MPFR_TREE@/src/$(DEPDIR)/get_z_2exp.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/gmp_op.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/init.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/init2.Po
@@ -2236,7 +2252,7 @@
-rm -f @MPFR_TREE@/src/$(DEPDIR)/set_str.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/set_ui_2exp.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/set_z.Po
- -rm -f @MPFR_TREE@/src/$(DEPDIR)/set_z_exp.Po
+ -rm -f @MPFR_TREE@/src/$(DEPDIR)/set_z_2exp.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/set_zero.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/setmax.Po
-rm -f @MPFR_TREE@/src/$(DEPDIR)/setmin.Po
Modified: trunk/Build/source/libs/mpfr/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/libs/mpfr/TLpatches/ChangeLog 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/TLpatches/ChangeLog 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,3 +1,9 @@
+2023-01-12 Akira Kakuto <kakuto at jcom.zaq.ne.jp>
+
+ Imported mpfr-4.2.0 source tree from:
+ http://ftp.gnu.org/gnu/mpfr/
+ * patch-01-TL: Adapted.
+
2022-11-18 Akira Kakuto <kakuto at jcom.zaq.ne.jp>
Imported mpfr-4.1.1 source tree from:
Modified: trunk/Build/source/libs/mpfr/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/mpfr/TLpatches/TL-Changes 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/TLpatches/TL-Changes 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,4 +1,4 @@
-Changes applied to the mpfr-4.1.1/ tree as obtained from:
+Changes applied to the mpfr-4.2.0/ tree as obtained from:
http://ftp.gnu.org/gnu/mpfr/
Removed:
Modified: trunk/Build/source/libs/mpfr/TLpatches/patch-01-TL
===================================================================
--- trunk/Build/source/libs/mpfr/TLpatches/patch-01-TL 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/TLpatches/patch-01-TL 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,9 +1,9 @@
-diff -ur mpfr-4.1.1/src/mparam_h.in mpfr-src/src/mparam_h.in
---- mpfr-4.1.1/src/mparam_h.in Fri Jan 07 00:27:38 2022
-+++ mpfr-src/src/mparam_h.in Fri Nov 18 05:45:03 2022
-@@ -31,6 +31,8 @@
- /* Note: the different macros used here are those defined by gcc,
- for example with gcc -mtune=native -dM -E -xc /dev/null */
+diff -ur mpfr-4.2.0/src/mparam_h.in mpfr-src/src/mparam_h.in
+--- mpfr-4.2.0/src/mparam_h.in Fri Jan 06 02:09:48 2023
++++ mpfr-src/src/mparam_h.in Thu Jan 12 13:20:19 2023
+@@ -38,6 +38,8 @@
+ -march=... and -mtune=...).
+ See https://gcc.gnu.org/pipermail/gcc-help/2021-September/140720.html */
+#elif 1 /* no processor specific optimization for TeX Live */
+#define MPFR_TUNE_CASE "default"
Modified: trunk/Build/source/libs/mpfr/configure
===================================================================
--- trunk/Build/source/libs/mpfr/configure 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/configure 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for mpfr (TeX Live) 4.1.1.
+# Generated by GNU Autoconf 2.71 for mpfr (TeX Live) 4.2.0.
#
# Report bugs to <tex-k at tug.org>.
#
@@ -610,8 +610,8 @@
# Identity of this package.
PACKAGE_NAME='mpfr (TeX Live)'
PACKAGE_TARNAME='mpfr--tex-live-'
-PACKAGE_VERSION='4.1.1'
-PACKAGE_STRING='mpfr (TeX Live) 4.1.1'
+PACKAGE_VERSION='4.2.0'
+PACKAGE_STRING='mpfr (TeX Live) 4.2.0'
PACKAGE_BUGREPORT='tex-k at tug.org'
PACKAGE_URL=''
@@ -1329,7 +1329,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures mpfr (TeX Live) 4.1.1 to adapt to many kinds of systems.
+\`configure' configures mpfr (TeX Live) 4.2.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1400,7 +1400,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of mpfr (TeX Live) 4.1.1:";;
+ short | recursive ) echo "Configuration of mpfr (TeX Live) 4.2.0:";;
esac
cat <<\_ACEOF
@@ -1504,7 +1504,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-mpfr (TeX Live) configure 4.1.1
+mpfr (TeX Live) configure 4.2.0
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1874,7 +1874,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by mpfr (TeX Live) $as_me 4.1.1, which was
+It was created by mpfr (TeX Live) $as_me 4.2.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -4418,7 +4418,7 @@
# Define the identity of the package.
PACKAGE='mpfr--tex-live-'
- VERSION='4.1.1'
+ VERSION='4.2.0'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -8072,7 +8072,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by mpfr (TeX Live) $as_me 4.1.1, which was
+This file was extended by mpfr (TeX Live) $as_me 4.2.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -8144,7 +8144,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-mpfr (TeX Live) config.status 4.1.1
+mpfr (TeX Live) config.status 4.2.0
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
Modified: trunk/Build/source/libs/mpfr/mpfr-src/BUGS
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/BUGS 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/BUGS 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,4 +1,4 @@
-Copyright 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/ChangeLog
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/ChangeLog 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/ChangeLog 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,18 +1,373 @@
-2022-11-17 Vincent Lefevre <vincent at vinc17.net>
+2023-01-06 Vincent Lefevre <vincent at vinc17.net>
- Updated version to 4.1.1.
+ Updated version to 4.2.0.
-2022-11-17 Vincent Lefevre <vincent at vinc17.net>
+2023-01-05 Vincent Lefevre <vincent at vinc17.net>
- [NEWS] Update for 4.1.1.
+ [src/zeta.c] For s < 1/2, use mpfr_sinpi now that it is available.
- Removed "by using a recent texinfo.tex file" because GNU Texinfo 7.0
- has been released in the mean time (we're actually using a slightly
- more recent version, but the current version of the MPFR manual has
- workarounds that do not need the latest fixes in texinfo.tex).
+ This replaces the use of mpfr_sin with a multiplication by π and
+ resolves a potential (but very unlikely) underflow issue; a comment
+ is updated, with an explanation about that.
+2023-01-05 Vincent Lefevre <vincent at vinc17.net>
+
+ Updated copyright notice for all the Makefile.am files.
+
+ To be similar to the other files, added:
+ * Contributed by the AriC and Caramba projects, INRIA.
+ * This file is part of the GNU MPFR Library.
+
+ (These Makefile.am files still have their special license.)
+
+2023-01-05 Vincent Lefevre <vincent at vinc17.net>
+
+ Copyright notice update: added 2023.
+
+ Command used:
+ perl -pi -e 's/ (\d{4}-)?(2022)(?= Free Software)/
+ " ".($1||"$2-").($2+1)/e' **/*(^/)
+ under zsh, reverting doc/texinfo.tex (copied from GNU Texinfo)
+ and the tools/mbench directory (not distributed with MPFR).
+ Removed 2022 from the example in the doc/README.dev file.
+
+2023-01-04 Vincent Lefevre <vincent at vinc17.net>
+
+ [src/zeta.c] Updated a comment about mpfr_sinpi.
+
+ [doc/mpfr.texi] Updated the month.
+
+2022-12-17 Vincent Lefevre <vincent at vinc17.net>
+
+ [tools/mpfrlint] Updated the __gmp_ test.
+
+ * No longer exclude '^tests/tabort_defalloc': this is no longer needed
+ since commit 41bed90365fd1296cd05f49c813ab0a0b151a62e in 2017.
+ * Exclude a new comment.
+
+2022-12-15 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests/tsprintf.c] Added a comment about a possible test failure.
+
+ In short, if the error is like
+ repl-vsnprintf.c:389: GNU MP assertion failed: len < total_width
+ this is a GMP (or MPIR) issue in __gmp_replacement_vsnprintf.
+
+ References:
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-10/msg00001.html
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-10/msg00027.html
+ https://gmplib.org/list-archives/gmp-bugs/2022-October/005200.html
+
+2022-12-15 Vincent Lefevre <vincent at vinc17.net>
+
+ Documentation: update about requirements for building MPFR.
+
+ * doc/mpfr.texi: mentioned C++ compilers and the potential issue
+ with type punning via union.
+ * INSTALL: completed (0) to be similar to what doc/mpfr.texi says.
+
+2022-12-15 Vincent Lefevre <vincent at vinc17.net>
+
+ [tools/update-version] Fixed replacements in "INSTALL".
+
+ Due to commit 4885b57add174f390eff29abe14d12fb5ebd6a61, only the first
+ of the 4 replacements in INSTALL was done.
+
+2022-12-14 Vincent Lefevre <vincent at vinc17.net>
+
+ [configure.ac] Added a comment about a possible AM_PROG_AR failure.
+
+ The reason is that on some platforms, GMP chooses a non-default mode
+ (a.k.a. ABI). MPFR has some workaround thanks to GMP_CC and GMP_CFLAGS
+ provided by GMP, but this may not be sufficient, e.g. on power-aix. In
+ such a case, the user needs to either force GMP to use the default mode
+ or provide an AR variable for MPFR's configure; see INSTALL file.
+
+2022-12-13 Vincent Lefevre <vincent at vinc17.net>
+
+ ChangeLog update with tools/update-changelog
+
+ [doc/README.dev] "To make a release": update.
+
+ [NEWS] Update for the 4.2.0 release: binary compatibility.
+
+ [doc/README.dev] "To make a release": update about <branch>-root tag.
+
+ [README] Updated URL of the README.dev file (for the 4.2 branch).
+
+ Updated version to 4.2.0-rc1.
+
+ ChangeLog update with tools/update-changelog
+
+ [src/Makefile.am] Updated -version-info to 8:0:2 for MPFR 4.2.0.
+
+ [manual] Section "API Compatibility": lexicographic order.
+
+2022-12-13 Vincent Lefevre <vincent at vinc17.net>
+
+ [NEWS,doc/mpfr.texi] Clarification for mpfr_pown.
+
+ Note: Though implemented as a macro, it is mainly documented as a
+ function (not as a macro) because it cannot be distinguished from
+ a function (for instance, one can take the function pointer).
+
+2022-12-13 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests/tget_flt.c] Added a comment.
+
+2022-12-13 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/README.dev] Updated a pathname.
+
+ This should have been done with the source reorganization on 2010-08-17
+ (see commit a6c9580d75b967e0d121d606edf03515ada45a7a).
+
+2022-12-12 Vincent Lefevre <vincent at vinc17.net>
+
+ Updated doc/texinfo.tex to 2022-12-10.11
+
+ The only change concerning MPFR is that in the PDF manual, the
+ section titles in the table of contents are now clickable.
+
+2022-12-12 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests/tstdint.c] Added missing conditional config.h inclusion.
+
+ The consequence of the missing inclusion is that on build systems that
+ need config.h (some MS Windows ones?), this test would be skipped.
+
+2022-12-12 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/README.dev] Clarification about the need of config.h inclusion.
+
+ [tests/tstdint.c] Updated comment.
+
+2022-12-12 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests/tstdint.c] Added a comment.
+
+ In short, this test allows one to detect that mpfr.h can be included
+ without any other inclusion before. For instance, it can detect any
+ unprotected use of FILE in the mpfr.h header file.
+
+2022-12-12 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Added comment about the update of the version string.
+
+2022-12-12 Vincent Lefevre <vincent at vinc17.net>
+
+ Revert "changed %.8e into %a to avoid potential decimal output bug"
+
+ This reverts commit e18ebe062042c01ad44b238df212f229bd251cd6.
+
+ We currently still support C90 (in particular, here this concerns
+ the C library of the platform).
+
+2022-12-12 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ changed %.8e into %a to avoid potential decimal output bug
+
+ (cf https://sympa.inria.fr/sympa/arc/mpfr/2022-12/msg00015.html)
+
+2022-12-12 Vincent Lefevre <vincent at vinc17.net>
+
+ [src/mpfr-cvers.h] Added a comment about (major,minor) tests.
+
+2022-12-12 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests/mpfr-test.h] Improved the change done a few hours earlier.
+
+ The code introduced by commit 558a246e612fa230623fb0dfa0570b1c626a103c
+ was changing the conditions under which IGNORE_CPP_COMPAT is defined
+ (to ignore -Wc++-compat with a GCC pragma). Let's simplify it by using
+ our __MPFR_GNUC() macro. The only possible change of behavior is that
+ this excludes Intel's compiler (which is probably better as testing
+ the GCC version on Intel's compiler doesn't make sense).
+
+ Note concerning the behavior of Intel icx 2021.3.0 under Linux: Before
+ the above commit, it was not excluded; but after this above commit, it
+ was excluded as it identifies itself as GCC 4.2.1 (like Clang). With
+ this new change, it is still excluded. Anyway, it ignores -Wc++-compat
+ and doesn't complain on the GCC pragmas, so the above choice currently
+ doesn't matter.
+
+2022-12-11 Vincent Lefevre <vincent at vinc17.net>
+
+ Avoid a testsuite build failure with GCC older than 4.6.
+
+ In tests/mpfr-test.h, we must not define IGNORE_CPP_COMPAT for
+ GCC < 4.6 as it does not allow "#pragma GCC diagnostic" inside
+ functions. Moreover, let's define it for all Clang versions,
+ including MS Windows (where __GNUC__ is not defined).
+
+ Changes based on information and a patch by Bruno Haible:
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-12/msg00007.html
+
+2022-12-09 Vincent Lefevre <vincent at vinc17.net>
+
+ [autogen.sh] Improved comment about the INSTALL file.
+
+ [autogen.sh] Updated comment about the INSTALL file.
+
+2022-12-07 Vincent Lefevre <vincent at vinc17.net>
+
+ [Makefile.am] Corrected a note about version-ext.sh in EXTRA_DIST.
+
+ In short, since commit a6e9d69047a358bfd1aaa1418d9999b8abe0bb62,
+ version-ext.sh should no longer be needed in EXTRA_DIST because
+ it will no longer be executed. But since this script is small,
+ we distribute it just in case it would be used.
+
+2022-12-06 Vincent Lefevre <vincent at vinc17.net>
+
+ Fixed version-ext.sh usage, avoiding "make check" failure and incorrect
+ version information.
+
+ The use of version-ext.sh could be incorrect when the MPFR source tree
+ was in a Git working tree:
+ * "make check" could fail in some cases, see the bug report by
+ Trevor Spiteri:
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-12/msg00000.html
+ * Version information output by "make check" could be incorrect.
+
+ Changes:
+ * tests/Makefile.am: For output_info, we now also check whether
+ $(top_srcdir)/.git is readable in order to avoid escaping the
+ MPFR source tree. In particular, if one extracts an MPFR tarball
+ within a Git working tree (e.g. after "make dist"), then running
+ "make check" in this extracted source tree will work as expected,
+ giving correct version information.
+ * tests/Makefile.am, version-ext.sh: Updated comments. In particular,
+ moved a comment from tests/Makefile.am to version-ext.sh; this should
+ have been done in commit 0d3abf10458ca4fdd26daa77a02f7f1f4e361deb,
+ i.e. when version-ext.sh was created.
+
+2022-12-06 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Removed useless leading spaces in examples.
+
+ All examples should have at least one line that does not have
+ leading spaces. Texinfo already indents examples in all cases.
+
+2022-12-06 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Removed useless single quotes in an example.
+
+ Texinfo changes these quotes to U+2019 RIGHT SINGLE QUOTATION MARK
+ with TeX output (PDF), and it is no part of ASCII, which might yield
+ issues in case of reuse in actual code. The subsequent example does
+ not use quotes, so let's do the same.
+
+2022-12-06 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Updated the month.
+
+2022-12-06 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Added a FIXME about the @need issue.
+
+ Context:
+ https://lists.gnu.org/archive/html/bug-texinfo/2022-11/msg00228.html
+
+2022-11-30 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] 2 replacements of ASCII "-" by @minus{}.
+
+ Note: these should be the last remaining issues with the minus sign.
+
+2022-11-30 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] 3 replacements of ASCII "-" by @minus{}.
+
+2022-11-28 Vincent Lefevre <vincent at vinc17.net>
+
+ [src/mpfr-impl.h] Added a comment for the umul_hi(h, x, y) macro.
+
+ Say that MPFR_NEED_LONGLONG_H needs to be defined to use it.
+
+ This macro is defined unconditionally (this is not an issue) because
+ MPFR_NEED_LONGLONG_H has been undefined earlier in mpfr-impl.h (why?),
+ so we can no longer test MPFR_NEED_LONGLONG_H.
+
+2022-11-28 Vincent Lefevre <vincent at vinc17.net>
+
+ Get rid of the _mulx_u64 intrinsic.
+
+ It was found that this intrinsic has issues with ICC, Cygwin, and more
+ generally, the Microsoft toolchain; even MPFR's strong detection at
+ configure time (an AC_RUN_IFELSE test) was not sufficient. Moreover,
+ _mulx_u64 is useless as umul_ppmm from mpfr-longlong.h does the same
+ thing from the spec point of view (and thus was used as the fallback).
+ So, if there is a reliable way to use the mulx instruction whenever
+ possible (including via compiler optimization and the use of __int128
+ when available, as done by GCC's _mulx_u64 implementation), this
+ should be done in the umul_ppmm definition. Alternatively, we could
+ redefine umul_ppmm for the use of __int128 when possible.
+
+ Context and references:
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-11/msg00008.html
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-11/msg00027.html
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-11/msg00030.html
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-11/msg00031.html
+ https://stackoverflow.com/a/54815033/3782797
+
+ * src: corrected the umul_hi(h, x, y) macro (the only code that was
+ using _mulx_u64) and moved it from invert_limb.h and invsqrt_limb.h
+ to mpfr-impl.h.
+ * tests/tversion.c: removed the output info about _mulx_u64.
+ * acinclude.m4: removed the check for _mulx_u64.
+
+2022-11-25 Vincent Lefevre <vincent at vinc17.net>
+
+ [NEWS] Added release name for 4.2.0: "fondue savoyarde".
+
+ mpfr-longlong.h update from the current GMP development code.
+
+2022-11-24 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [doc/mini-gmp] updated svn revision to git revision
+ [tools/bench/README] likewise
+
+2022-11-23 Vincent Lefevre <vincent at vinc17.net>
+
+ [tools/build-patch] Update for patches generated by git.
+
+ Such patches are of the form
+ --- a/path/name
+ +++ b/path/name
+ so with need to use the -p1 patch option if the --- line
+ starts with "--- a/".
+
+2022-11-23 Vincent Lefevre <vincent at vinc17.net>
+
+ [tools/build-patch] Updated a comment for Git.
+
+2022-11-22 Vincent Lefevre <vincent at vinc17.net>
+
+ Fix mpfr_custom_get_kind() macro bug.
+
+ * src/mpfr.h: in the mpfr_custom_get_kind() macro, changed mpfr_ptr to
+ mpfr_srcptr for _x to agree with the function prototype, in order to
+ avoid a compilation failure of user code in some cases. This bug was
+ introduced by commit 9f94e0311ed53d0c64d4fbca249d19cc4888027e, which
+ introduced the temporary variable _x to avoid an incorrect number of
+ evaluations of the x argument.
+ * tests/tstckintc.c: improved the tests to detect this bug.
+
+ This should fix mpfr bug #1.
+
+ Bug initially reported by FX Coudert:
+ https://github.com/CGAL/cgal/issues/7064
+
+ It affects Fedora Linux:
+ https://bugzilla.redhat.com/show_bug.cgi?id=2144197
+
2022-11-17 Vincent Lefevre <vincent at vinc17.net>
+ ChangeLog update with tools/update-changelog
+
+2022-11-17 Vincent Lefevre <vincent at vinc17.net>
+
[doc/mpfr.texi] Changed a @need command due to a bug in @need.
A page break was introduced for "@need 800" while there was the
@@ -60,10 +415,10 @@
2022-11-16 Vincent Lefevre <vincent at vinc17.net>
- Updated version to 4.1.1-rc1 again with the new tools/update-version.
+ Updated version to 4.2.0-dev with the new tools/update-version.
All the expected replacements have now *really* been done thanks to
- commit 9f1d88a7ab750a9f33ff5c7f6b27bc2e941ca4b6.
+ commit a4dec8938b85afbca2d448ae2dd4e0d3ab72b00c.
2022-11-16 Vincent Lefevre <vincent at vinc17.net>
@@ -81,28 +436,22 @@
Updated doc/texinfo.tex to 2022-11-13.08
-2022-11-11 Vincent Lefevre <vincent at vinc17.net>
+ [TODO] Added URL for the Clang multiprecision arithmetic builtins.
- [doc/README.dev] Updated "To make a release".
+2022-11-15 Paul Zimmermann <Paul.Zimmermann at inria.fr>
- [doc/README.dev] "To make a release": mention the README file.
+ [TODO] add reference to __builtin_addcll
2022-11-11 Vincent Lefevre <vincent at vinc17.net>
- [README] Changed link to the README.dev file to the 4.1 branch.
+ [doc/README.dev] "To make a release": mention the README file.
- It is probably better to give the link in the 4.1 branch, since
- we are in the 4.1 branch: some changes in master may not apply
- to the 4.1 branch (for instance, the list of macros and the list
- of environment variables that affect the tests). Future changes
- useful for the 4.1 branch could be cherry-picked if need be.
-
2022-11-10 Vincent Lefevre <vincent at vinc17.net>
- Updated version to 4.1.1-rc1 again with the new tools/update-version.
+ Updated version to 4.2.0-dev with the new tools/update-version.
All the expected replacements have now been done in doc/mpfr.texi,
- thanks to commit 9645c5255492c6d00133a3a90e479d374b6c061d.
+ thanks to commit 7eda345244f503359d14cd5bae1ed42865d39ee8.
2022-11-10 Vincent Lefevre <vincent at vinc17.net>
@@ -133,75 +482,151 @@
2022-11-08 Vincent Lefevre <vincent at vinc17.net>
- [doc/mpfr.texi] Various corrections and improvements.
+ [doc/mpfr.texi] Updated comment about an issue with math operators.
- * mpfr_subnormalize: define EXP(x) and PREC(x).
- * More typographic corrections and improvements.
+ [doc/mpfr.texi] Added a comment about an issue with math operators.
-2022-11-07 Vincent Lefevre <vincent at vinc17.net>
+ [doc/mpfr.texi] Another typographic improvement.
- [doc/mpfr.texi] Added a comment (ref to the GNU Texinfo spacing bug).
+2022-11-08 Vincent Lefevre <vincent at vinc17.net>
-2022-11-07 Vincent Lefevre <vincent at vinc17.net>
+ [doc/mpfr.texi] Added a comment for \mathop with a single character.
- [doc/mpfr.texi] Remaining typographic correction for a math expression.
+ Workaround to avoid an alignment issue described at
+ https://tex.stackexchange.com/questions/41261/mathop-shifts-the-baseline-declaremathoperator-doesnt
+ when the math operator @EXP{} was just "E".
- This is specific to the 4.1 branch as the text was removed in master
- with the new function mpfr_rootn_si.
+2022-11-08 Vincent Lefevre <vincent at vinc17.net>
+ [doc/mpfr.texi] More typographic corrections and improvements.
+
+ Also did some changes to improve the consistency.
+
2022-11-07 Vincent Lefevre <vincent at vinc17.net>
- [doc/mpfr.texi] Typographic corrections and English usage.
+ [doc/mpfr.texi] Added a comment (ref to the GNU Texinfo spacing bug).
- * More documentation for the @m{T,N} macro.
+2022-11-07 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] More typographic corrections for math expressions.
+
* Note a spacing bug in texi2dvi from GNU Texinfo 6.8 with macros
(found while testing).
* Define macro @EXP (and \EXP in TeX).
- * Typographic corrections for math expressions and English usage.
+ * Typographic corrections for math expressions.
-2022-11-04 Vincent Lefevre <vincent at vinc17.net>
+2022-11-07 Vincent Lefevre <vincent at vinc17.net>
- [doc/mpfr.texi] Minor typographic correction.
+ [doc/mpfr.texi] Added a comment.
- This corrects commit d1a6e781428506bc49bc98d632265cf2d4406c9f.
+ [doc/mpfr.texi] Improved typography and English usage.
+ [doc/mpfr.texi] More documentation for the @m{T,N} macro.
+
2022-11-04 Vincent Lefevre <vincent at vinc17.net>
- [doc/mpfr.texi] Updated the month.
+ [src/set_zero.c] IEEE 754 terminology in a comment.
2022-11-04 Vincent Lefevre <vincent at vinc17.net>
- [doc/mpfr.texi] Various improvements and style corrections from master.
+ [doc/mpfr.texi] Improved consistency about infinity and zero.
- with conflict resolutions.
+ Note: one writes "+0", but "positive zero", not "plus zero", etc.
+ See the IEEE 754 standard.
2022-11-03 Vincent Lefevre <vincent at vinc17.net>
- [manual] For sqrt, mention the relation with rootn.
+ [doc/mpfr.texi] Minor corrections related to infinity.
- This corresponds to commit a9bdb273b79ae470ad2177c27e7e978f4bc9831e
- from master, ignoring mpfr_rootn_si, which is not in the 4.1 branch.
+ This completes commit 75041697429ba467c448195b4f0863d0eb92e20c
+ done in 2021-02.
2022-11-03 Vincent Lefevre <vincent at vinc17.net>
- Fixed some minor mistakes.
+ [doc/mpfr.texi] Style corrections.
- * Minor mistakes in doc/mpfr.texi reported by Ivan Panchenko:
- https://sympa.inria.fr/sympa/arc/mpfr/2022-10/msg00020.html
- (spacing and italicization not fixed yet).
- * Fixed similar mistakes in the other files.
+2022-11-03 Vincent Lefevre <vincent at vinc17.net>
-2022-11-03 Vincent Lefèvre <vincent at vinc17.net>
+ [doc/mpfr.texi] Style improvement for TeX (PDF) output.
- [doc] Update about "case insensitive" and issue with Turkish locales
- for "I" / "i".
+ For mpfr_acosu, mpfr_asinu, mpfr_atanu and mpfr_atan2u, make the style
+ similar to the one for mpfr_cosu, mpfr_sinu and mpfr_tanu.
- * mpfr.texi: added "with the rules of the C locale" in the
- mpfr_strtofr description.
- * README.dev: completed information about Turkish locales.
-
2022-11-03 Vincent Lefevre <vincent at vinc17.net>
+ [doc/mpfr.texi] More use of @tm (typographic corrections).
+
+2022-11-01 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Updated the month.
+
+ [doc/mpfr.texi] Completed the description of the @mm macro.
+
+2022-11-01 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Improved typography for the formatted output functions.
+
+ For what is displayed (or output text), @samp{...} should be used,
+ as already done in some cases (note: never enclose @samp{...} with
+ quotes as this is already done in the Texinfo processing).
+
+2022-11-01 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Improved the readability of an example.
+
+2022-11-01 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] More typographic corrections for TeX (PDF) output.
+
+ * Define a @mm{T} macro to be used for math symbols outside of @m,
+ @tm, @code or similar (but not for the "+" in "C++").
+ * Use this macro when applicable.
+ * Add missing @tm for some simple math expressions.
+
+2022-10-28 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Added tm macro and improved math typography.
+
+2022-10-27 Vincent Lefevre <vincent at vinc17.net>
+
+ [tools/nightly-test] Corrections and cleanup.
+
+ In particular, reverted most changes done in SVN r9832
+ (commit 1ca64e34907c5a968ca7fcc3d22cdca2ede7f28b):
+ * switch back to /bin/sh (bash is not needed by this script);
+ * do not use --enable-decimal-float and --enable-float128 with
+ a C++ compiler as they are not supported (configure fails).
+
+ And for the "git clone" command:
+ * take the BRANCH argument into account;
+ * use --depth 1 to avoid an unnecessary full clone.
+
+ Better g++ detection (e.g. g++-12 or /usr/bin/g++, not just g++).
+
+2022-10-27 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [tools/nightly-test] change to git
+
+2022-10-26 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Cosmetic consistency change in the .texi source.
+
+ Let's use the same code for "start of header" and "end of header".
+
+2022-10-25 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Updated @m{T,N} macro, with comments.
+
+ The @m{T,N} macro is used for math formatting and textual equivalent
+ (human-readable text). However, it was generating emphasis in HTML,
+ which was unexpected. This commit removes the use of @math for the
+ Info and HTML output (for Info, this does not change anything, and
+ for HTML, this removes the incorrect emphasis). It also updates the
+ documentation and adds a comment about the history of this macro and
+ various issues related to it.
+
+2022-10-24 Vincent Lefevre <vincent at vinc17.net>
+
Updated doc/texinfo.tex to 2022-10-18.18
Update from the texinfo Git repository.
@@ -208,6 +633,73 @@
* The generated mpfr.html and mpfr.info files remain the same.
* For mpfr.pdf, there are some spacing improvements.
+2022-10-11 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Updated the month.
+
+2022-10-11 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Fix formatting for mpfr_can_round.
+
+ Consistency changes and use of no-break space (@tie{}).
+
+ Note: Once @math{...} has been clarified/fixed, apply the suggestions
+ by Ivan Panchenko:
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-10/msg00020.html
+
+2022-10-11 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Consistency correction for mpfr_get_str_ndigits.
+
+ Use @math{m} (instead of just m) as already used a bit earlier.
+
+ But the use of @math may need to be revised. See
+ https://lists.gnu.org/archive/html/bug-texinfo/2022-10/msg00045.html
+
+2022-10-11 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Improved spacing.
+
+ 2 changes suggested by Ivan Panchenko at
+
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-10/msg00020.html
+
+ but do not use @math{...} as with HTML output, it puts everything
+ in italics with <em class='math'>...</em>, which is incorrect for
+ things like digits.
+
+ However, this behavior of @math{...} is not what is documented in
+ the GNU Texinfo 6.8 manual, which says:
+
+ The '@math' command has no special effect on the Info output or (by
+ default) the HTML output, merely outputting the contents verbatim.
+
+2022-10-11 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Added a comment about the use of @math{...}.
+
+2022-10-11 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Fixed italicization for mpfr_eint.
+
+ An issue reported by Ivan Panchenko:
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-10/msg00020.html
+
+ I also had to fix the occurrences of k in @ifnottex for HTML.
+
+2022-10-11 Vincent Lefevre <vincent at vinc17.net>
+
+ Fixed some minor mistakes.
+
+ * Minor mistakes in doc/mpfr.texi reported by Ivan Panchenko:
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-10/msg00020.html
+ (spacing and italicization not fixed yet).
+ * Fixed similar mistakes in the other files.
+
+2022-10-11 Vincent Lefevre <vincent at vinc17.net>
+
+ mpfrlint: updated text checking (spelling...)
+
2022-10-05 Vincent Lefevre <vincent at vinc17.net>
ChangeLog update with tools/update-changelog
@@ -223,14 +715,12 @@
2022-10-05 Vincent Lefevre <vincent at vinc17.net>
- [doc/README.dev] "To make a release": corrections about the tag.
+ [doc/README.dev] "To make a release": precision about the tag.
- ChangeLog update with tools/update-changelog
+ [doc/README.dev] "To make a release": correction about the tag.
[tests/tnrandom.c] Fixed compilation failure with mini-gmp.
- ChangeLog update with tools/update-changelog
-
2022-10-05 Vincent Lefevre <vincent at vinc17.net>
[tools] Improvement for the ChangeLog generation.
@@ -271,8 +761,6 @@
2022-10-05 Vincent Lefevre <vincent at vinc17.net>
- Corrected comment about the ".POSIX" line in all Makefile.am files.
-
[doc/README.dev] "To make a release": update for abi-compliance-checker.
2022-10-05 Vincent Lefevre <vincent at vinc17.net>
@@ -300,7 +788,7 @@
[tests/tnrandom.c] Support non-default seed (GMP_CHECK_RANDOMIZE).
- This fixes a failure due to 98014bfa2e453dd96dece493a88f983f111fc6a3
+ This fixes a failure due to 4c5973c2f0153a3a4708cab79ed142e72c4a50eb
when GMP_CHECK_RANDOMIZE is set.
2022-10-04 Vincent Lefevre <vincent at vinc17.net>
@@ -309,8 +797,6 @@
2022-10-03 Vincent Lefevre <vincent at vinc17.net>
- [doc] Updated FAQ.html with update-faq.
-
[doc/update-faq] Ensure that the code is run from the doc directory.
[tools/coverage] Typo.
@@ -317,12 +803,10 @@
[doc/README.dev] Updated "To make a release".
- [NEWS] Update for 4.1.1.
+ Updated URLs.
- doc/mpfr.texi: Updated the month.
+ Updated URLs.
- Updated version to 4.1.1-rc1 (with tools/update-version).
-
Updated URLs.
2022-10-03 Vincent Lefevre <vincent at vinc17.net>
@@ -332,7 +816,7 @@
The addition of the <branch>-root tag applies only after a branch
is created, i.e. for non-patchlevel releases (item 0).
-2022-09-18 Vincent Lefevre <vincent at vinc17.net>
+2022-09-14 Vincent Lefevre <vincent at vinc17.net>
Updated doc/texinfo.tex to 2022-09-14.01
@@ -340,6 +824,12 @@
* The generated mpfr.html and mpfr.info files remain the same.
* For mpfr.pdf, this version fixes all the issues I've reported.
+2022-09-09 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/README.dev] Updated "To make a release".
+
+ [src/mpfr-impl.h] Added TODO for MPFR_MAYBE_UNUSED.
+
2022-09-07 Vincent Lefevre <vincent at vinc17.net>
[doc/README.dev] New C2x draft (N3054).
@@ -358,42 +848,189 @@
and the svn:ignore property should have been updated at this time,
but I forgot.
+2022-09-03 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests/RRTest.c] Replaced "egrep" by "grep -E" in comment.
+
+ In the GNU grep 3.8 release notes:
+ The egrep and fgrep commands, which have been deprecated since
+ release 2.5.3 (2007), now warn that they are obsolescent and should
+ be replaced by grep -E and grep -F.
+
2022-08-27 Vincent Lefevre <vincent at vinc17.net>
[doc/README.dev] Changed "trunk" (Subversion) to "master" (Git).
-2022-08-27 Vincent Lefevre <vincent at vinc17.net>
+ [doc/README.dev] New C2x draft (N3047).
- [doc/README.dev] Update from master, minus a few things.
+2022-08-26 Vincent Lefevre <vincent at vinc17.net>
- From the master version, removed
- * text that do not apply to the 4.1 branch;
- * an obsolete URL.
+ [tools/announce-text] Updated key ID for the future releases.
-2022-08-27 Vincent Lefevre <vincent at vinc17.net>
+2022-08-19 Vincent Lefevre <vincent at vinc17.net>
- Added m4/ax_pthread.m4 file, and related updates.
+ [codespell.ignore] Ignore RO and SIZ (codespell 2.2.0).
- This adds m4/ax_pthread.m4 from master and changes the following files:
- * acinclude.m4: updated comment; set CXX and CXXFLAGS.
- * configure.ac: moved AC_CANONICAL_HOST earlier and added a comment
- (this was needed with an intermediate version of ax_pthread.m4,
- but this change is kept as this should be better).
- * doc/README.dev: update about the AX_PTHREAD macro.
+ Corrected spelling mistake found by codespell 2.2.0
-2022-08-27 Vincent Lefevre <vincent at vinc17.net>
+2022-08-16 Vincent Lefevre <vincent at vinc17.net>
- Added tools/export-release sh script from master.
+ Cleanup about decimal floating constants matching ".0d".
+ In general, the trailing 0 is not needed, and even not wanted
+ (this has the effect to decrease the quantum by 1 compared to the
+ "natural value"), though the quantum is not yet specified in MPFR.
+
+ In tests/tget_set_d64.c, kept this trailing 0 in mpfr_set_decimal64,
+ but added similar tests without this trailing 0.
+
+2022-08-08 Vincent Lefevre <vincent at vinc17.net>
+
+ version-ext.sh: replaced a remaining "sed" by "$SED".
+
+ Thanks to Trevor Spiteri for noticing that.
+
+2022-08-08 Vincent Lefevre <vincent at vinc17.net>
+
+ version-ext.sh: handle the case where no Git branches are found.
+
+ This should solve the issue reported on 2022-08-08 by Trevor Spiteri:
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-08/msg00002.html
+
+2022-07-08 Vincent Lefevre <vincent at vinc17.net>
+
+ doc/mpfr.texi: Updated the month.
+
+2022-07-08 Vincent Lefevre <vincent at vinc17.net>
+
+ [manual] Added a note for mpfr_nexttoward (exceptions, sign of 0).
+
+ Also applies to mpfr_nextabove and mpfr_nextbelow, whose description
+ refers to mpfr_nexttoward.
+
+ See additional details in the comment in the src/next.c source.
+
+2022-07-08 Vincent Lefevre <vincent at vinc17.net>
+
+ [src/next.c] Updated comment (exceptions and sign of 0).
+
+ Concerned functions: mpfr_nexttoward, mpfr_nextabove, mpfr_nextbelow.
+
+ Clarification was needed due to the differences between the
+ IEEE 754-1985, IEEE 754-2008/2019 and ISO C99+ standards on
+ similar functions (nextafter, nextUp, nextDown).
+
+2022-07-06 Vincent Lefevre <vincent at vinc17.net>
+
+ [configure.ac] Update about GNU gold ld and LD_RUN_PATH.
+
+ * Comment update: added URL of the upstream bug report.
+ * Mention the GNU gold linker in the warning.
+
+2022-06-13 Vincent Lefevre <vincent at vinc17.net>
+
+ [README] Replaced "Subversion" by "Git".
+
+ [doc/README.dev] Completed the update for Git.
+
+ [doc/README.dev] Moved and clarified a paragraph about the tests.
+
+2022-06-11 Vincent Lefevre <vincent at vinc17.net>
+
+ Fixed tsprintf %a tests when GMP and libc produce different outputs.
+
+ With some 32-bit mingw-w64 implementations, the GMP and libc
+ formatted output functions produce different outputs for %a (this
+ is not completely specified by the C standard). In the MPFR tests
+ introduced by commit 22db634294c27eabbc0c55b04267d3ab5bc9a648 on
+ 2022-05-19, the comparison is done between the MPFR result, which
+ is based on GMP, and the libc result; hence a failure.
+
+ So, changed the 4 concerned tests of tests/tsprintf.c to compare
+ the MPFR result with the GMP result (for the other tests on the
+ C native types, it is still better to compare MPFR with libc).
+
+ Bug report:
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-06/msg00004.html
+
+2022-06-10 Vincent Lefevre <vincent at vinc17.net>
+
+ [tools/announce-text] Completed the update for Git.
+
+ [tools/announce-text] Check that one has an annotated tag at origin.
+
+ [tools/announce-text] Update.
+
+ [tools/announce-text] Minor git-related simplification.
+
+ [tools/announce-text] Started the update for Git.
+
+ [tools/announce-text] Removed code and text related to InriaForge (obsolete).
+
+2022-06-08 Vincent Lefevre <vincent at vinc17.net>
+
+ Updated www.open-std.org URLs: http → https.
+
+2022-06-07 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/README.dev] New C2x draft (N2912).
+
+2022-06-02 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/README.dev] Updated "To make a release".
+
+ This completes the update for Git and Inria GitLab. But the
+ tools/announce-text script has not been updated yet.
+
+2022-06-02 Vincent Lefevre <vincent at vinc17.net>
+
+ [tools/export-release] Completed the script.
+
+ Fix the timestamps so that each file or directory has a timestamp
+ corresponding to its last change.
+
+2022-06-02 Vincent Lefevre <vincent at vinc17.net>
+
+ Added tools/export-release sh script.
+
Export some release identified by a Git tag in order to get a tarball.
-2022-08-27 Vincent Lefevre <vincent at vinc17.net>
+2022-06-02 Vincent Lefevre <vincent at vinc17.net>
+ [mbench] Updated Copyright lines.
+
+ Added tools/mbench/.gitignore file.
+
+ [mbench/Makefile] Added missing dependencies on timp.h
+
+2022-06-02 Vincent Lefevre <vincent at vinc17.net>
+
+ [mbench/timp.h] Bug fix for "make rt" on 32-bit machines. Reindent.
+
+ For the code used when USE_CLOCK_MONOTONIC is defined ("make rt"):
+ If both time_t (type of tv_sec) and long are 32-bit types, there was
+ an overflow in the timp_rdtsc() macro, due to the multiplication of
+ the tv_sec (coming from CLOCK_MONOTONIC, thus typically larger than 5)
+ by the value 1000000000 (≈ 2^32 / 4.3) of type unsigned long, because
+ this multiplication would be done on 32 bits. Changed the type of the
+ constant to unsigned long long so that the operations are done with
+ the target type unsigned long long (at least).
+
+2022-06-02 Vincent Lefevre <vincent at vinc17.net>
+
+ [mbench] Removed trailing whitespace.
+
+2022-06-01 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/README.dev] Updated "To make a release" (about ChangeLog).
+
+ ChangeLog update with "make ChangeLog"
+
[tools/ck-copyright-notice] Better indentation.
[tools/ck-copyright-notice] Support the future ChangeLog format.
-2022-08-27 Vincent Lefevre <vincent at vinc17.net>
+2022-06-01 Vincent Lefevre <vincent at vinc17.net>
[tools/ck-copyright-notice] Better error handling.
@@ -400,7 +1037,7 @@
Note: One currently gets a failure with the future ChangeLog format,
obtained with gitlog-to-changelog (via "make ChangeLog").
-2022-08-27 Vincent Lefevre <vincent at vinc17.net>
+2022-06-01 Vincent Lefevre <vincent at vinc17.net>
Support ChangeLog regeneration from a Git working tree.
@@ -416,116 +1053,161 @@
Note: In the future, if there is any change to do to a Git commit
message (typo, etc.), the --amend option could be used.
-2022-08-27 Vincent Lefevre <vincent at vinc17.net>
+2022-05-30 Vincent Lefevre <vincent at vinc17.net>
- [tools/announce-text] Update from master.
+ Started to update doc/README.dev for Git.
-2022-08-27 Vincent Lefèvre <vincent at vinc17.net>
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
- With wget, use the --no-config option.
+ [manual] Clarify the description of the formatted output functions.
- [INSTALL,doc/update-faq,tools/announce-text] With wget, use
- the --no-config option as the user's .wgetrc file may significantly
- change the behavior and possibly yield errors. See discussion at
- <https://lists.debian.org/debian-user/2021/01/msg01021.html>.
+ Emphasize the fact that the conv specifier F is not supported, except
+ for the type specifier R (for mpfr_t arguments).
-2022-08-23 Vincent Lefevre <vincent at vinc17.net>
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
- [codespell.ignore] Ignore RO and SIZ (codespell 2.2.0).
+ [src/vasprintf.c] Consistency with the non-support of %F by GMP.
- Corrected spelling mistake found by codespell 2.2.0
+ The F conversion specifier as defined by the C standard is not
+ supported by the GMP formatted output functions because it is
+ already used as the type specifier for mpf_t (which comes before
+ the conversion specifier). Let's take this fact into account.
- doc/mpfr.texi: Updated the month.
+ Note: this conversion specifier is still allowed with MPFR numbers
+ (e.g., "%RF") to avoid breaking the compatibility (it has never
+ been an issue).
-2022-08-08 Vincent Lefevre <vincent at vinc17.net>
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
- version-ext.sh: replaced a remaining "sed" by "$SED".
+ [tests/tsprintf.c] native_types: added tests to differentiate %G from %g.
- Thanks to Trevor Spiteri for noticing that.
+ The tested value -1.25 had the same output -1.25 with %g and %G.
+ Added 7.62939453125e-6 (= 2^(-17)), whose output by %g and %G has
+ an exponent introduced by 'e' and 'E' respectively.
-2022-08-08 Vincent Lefevre <vincent at vinc17.net>
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
- version-ext.sh: handle the case where no Git branches are found.
+ [tests/tsprintf.c] native_types: added tests for %a, %A, %la, %lA
- This should solve the issue reported on 2022-08-08 by Trevor Spiteri:
- https://sympa.inria.fr/sympa/arc/mpfr/2022-08/msg00002.html
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
-2022-08-08 Vincent Lefevre <vincent at vinc17.net>
+ [tests/tsprintf.c] Added/fixed native_types tests.
- For version-ext.sh, use "$SED" instead of "sed".
+ * Added tests of %E and %G.
+ * Removed the test of %lF, which is not supported by GMP (and yields
+ a heap buffer overflow, detected by AddressSanitizer): even though
+ there would be no ambiguity in this particular case, it is not
+ supported because the standard F conversion specifier isn't due to
+ the use of the F type specifier for mpf_t.
- * tests/Makefile.am: pass $SED to version-ext.sh.
- * version-ext.sh: use $SED (default to "sed").
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
-2022-08-08 Vincent Lefevre <vincent at vinc17.net>
+ [tests/tsprintf.c] Correction for %la, %lA, %le, %lE, %lf, %lF, %lg, %lG
- Fixed version-ext.sh when in an origin/* remote branch.
+ Reverted commit 2b60707d22717e0f582be5de680d7fa7004e2512 and added
+ tests for the missing %lE, %lF, %lG in native_types, protected by
+ a #if (see commit ecd3279f3dfd281fc8e51aac7509b76b27497a6c) as they
+ may need an ISO C99 compiler.
-2022-07-06 Vincent Lefevre <vincent at vinc17.net>
+ Note: The test of %la and %lA was incorrect because the first digit
+ is unspecified (and really depends on the C library). A test could
+ be added in the future, perhaps also with a configure test, because
+ the compiler may support ISO C99 but not the C library (there was
+ an issue like that at least with old versions of Solaris).
- [configure.ac] Update about GNU gold ld and LD_RUN_PATH.
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
- * Comment update: added URL of the upstream bug report.
- * Mention the GNU gold linker in the warning.
+ [tests/tsprintf.c] native_types: test %le, %lf, %lg only with C99+
-2022-07-06 Vincent Lefèvre <vincent at vinc17.net>
+ … since the l length modifier for the FP types (a, A, e, E, f, F, g, G
+ conversion specifiers) has been added in ISO C99.
- Punctuation (missing comma after "however").
+2022-05-19 Paul Zimmermann <Paul.Zimmermann at inria.fr>
-2022-06-13 Vincent Lefevre <vincent at vinc17.net>
+ [tests/tsprintf.c] added tests for %la, %lA, %le, %lE, %lf, %lF, %lg, %lG
- [README] Replaced "Subversion" by "Git".
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
-2022-06-11 Vincent Lefevre <vincent at vinc17.net>
+ [src/vasprintf.c] Bug fix for the l length modifier with FP type.
- Fixed tsprintf %a tests when GMP and libc produce different outputs.
+ The l length modifier is now supported with the a, A, e, E, f, F, g, G
+ conversion specifiers, as required by the ISO C standard on printf and
+ other formatted output functions. As specified, it is just ignored.
- With some 32-bit mingw-w64 implementations, the GMP and libc
- formatted output functions produce different outputs for %a (this
- is not completely specified by the C standard). In the MPFR tests
- introduced by commit 26fa003bc51fd75c180b7bca8070d66ceb53da62 on
- 2022-05-20, the comparison is done between the MPFR result, which
- is based on GMP, and the libc result; hence a failure.
+ For that, to improve code maintainability, the CASE_LONG_ARG() macro
+ was simplified:
+ * The c and s conversion specifiers are always supported by this
+ macro (this is a potential fix for implementations with incomplete
+ wide-character handling, without any guarantee to work).
+ * A MPFR_RET_NEVER_GO_HERE() for unsupported conversion specifiers
+ has been added (if specinfo_is_valid() is consistent with this
+ macro, one should effectively never reach this case).
- So, changed the 4 concerned tests of tests/tsprintf.c to compare
- the MPFR result with the GMP result (for the other tests on the
- C native types, it is still better to compare MPFR with libc).
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
- Bug report:
- https://sympa.inria.fr/sympa/arc/mpfr/2022-06/msg00004.html
+ [src/vasprintf.c] Made case ordering consistent (no change of behavior).
-2022-05-20 Vincent Lefevre <vincent at vinc17.net>
+ The "case" ordering in specinfo_is_valid() and in CONSUME_VA_ARG() for
+ integer specifiers and for floating-point specifiers was not the same.
+ Improved code readability by using the same order across the code
+ (also OK with CASE_LONG_ARG()).
- Fixes related to the native types in the formatted output functions.
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
- * doc/mpfr.texi: clarification for the formatted output functions.
- * src/vasprintf.c:
- - Made case ordering consistent (no change of behavior).
- - The l length modifier is now supported with the native FP types
- (a, A, e, E, f, g, G conversion specifiers), as required by the
- ISO C standard on printf and other formatted output functions.
- As specified, it is just ignored.
- For that, to improve code maintainability, the CASE_LONG_ARG()
- macro was simplified: The c and s conversion specifiers are
- always supported by this macro (this is a potential fix for
- implementations with incomplete wide-character handling,
- without any guarantee to work). A MPFR_RET_NEVER_GO_HERE()
- for unsupported conversion specifiers has been added (as
- specinfo_is_valid() is consistent with this macro, one should
- effectively never reach this case).
- - The F conversion specifier as defined by the C standard is not
- supported by the GMP formatted output functions because it is
- already used as the type specifier for mpf_t (which comes before
- the conversion specifier). Let's take this fact into account.
- Note: this conversion specifier is still allowed with MPFR numbers
- (e.g., "%RF") to avoid breaking the compatibility (it has never
- been an issue).
- * tests/tsprintf.c: added related tests.
+ [tests/tsprintf.c] native_types: test %le, %lf, %lg.
+ These tests are currently failing. Bug reported by Paul Zimmermann
+ for %la (but %a and %la are not currently tested, because of their
+ possible lack of support in the C library).
+
2022-05-19 Vincent Lefevre <vincent at vinc17.net>
+ [tests/tsprintf.c] native_types: same tests for i as for d.
+
[tests/tnrandom.c] With mini-gmp, disable the tests that check the values.
+ [acinclude.m4] Added a comment about the unreliable NAN != NAN check.
+
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests/cmp_str.c] In mpfr_cmp_str, check that s is a valid number.
+
+ In the tests, the string provided to mpfr_cmp_str is normally a
+ valid number (the common use is to check that a result is equal to
+ some hardcoded value given by a string). A string s that does not
+ represent a valid number probably has a typo, and the consequence
+ was that in such a case, any non-NaN result was regarded as correct.
+
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests/tsubnormal.c] Removed invalid testcase bug20220518.
+
+ The testcase bug20220518 added in
+ commit 7640a832fbf0b7f9057889e076cf7f42fe4f8e58
+ was invalid as the mpfr_subnormalize input was not in the current
+ exponent range (it had exponent -1074 while emin = -1073).
+
+ As usual, inputs outside the current exponent range are not supported
+ (the mpfr_subnormalize description in the manual is explicit:
+ "The subnormal exponent range is from ‘emin’ to ‘emin+PREC(X)-1’.").
+ Supporting values outside the current exponent range is not needed
+ in practice (see examples in the manual).
+
+2022-05-19 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests/tsubnormal.c] Code style in coverage().
+
+ [tests/tsubnormal.c] Added missing cleanup at the end of bug20220518.
+
+ [tests/tsubnormal.c] Simplified bug20220518.
+
+ [tests/tsubnormal.c] C90 compatibility.
+
+2022-05-18 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [tests/tsubnormal.c] added test case that exhibits a bug in mpfr_subnormalize
+ [src/subnormal.c] fixed typo
+
2022-05-18 Vincent Lefevre <vincent at vinc17.net>
[tests/tnrandom.c] Check some mpfr_nrandom values to detect changes.
@@ -533,11 +1215,57 @@
The values should be the same on different machines and with
different MPFR versions (or this would be an ABI change).
+2022-05-17 Vincent Lefevre <vincent at vinc17.net>
+
+ For version-ext.sh, use "$SED" instead of "sed".
+
+ * tests/Makefile.am: pass $SED to version-ext.sh.
+ * version-ext.sh: use $SED (default to "sed").
+
+2022-05-17 Vincent Lefevre <vincent at vinc17.net>
+
+ Fixed version-ext.sh when in an origin/* remote branch.
+
+2022-05-13 Vincent Lefevre <vincent at vinc17.net>
+
+ Tests: the check of subnormal support is done when running the tests.
+
+ The check of support for double and float subnormals was done at
+ configure time, but it could not be done when cross-compiling.
+ Since it is useful only for the tests, it is better to do it when
+ running the tests.
+
+ * tests/tests.c: added have_subnorm_dbl() and have_subnorm_flt()
+ functions to check support for double and float subnormals;
+ removed such a check from mpfr_test_init().
+ * tests/mpfr-test.h: declare these functions.
+ * tests/tget_flt.c: use have_subnorm_flt() instead of HAVE_SUBNORM_FLT.
+ * tests/tset_d.c, tests/tsprintf.c: removed the useless test of
+ HAVE_SUBNORM_DBL (this was a minor optimization).
+ * acinclude.m4: updated comment about the check of subnormal support;
+ minor improvement in the check for float subnormals.
+ Note: keep the check just for build information (it might be useful
+ for debugging or in case of a related bug report).
+ * tools/mpfrlint: check that the HAVE_SUBNORM_* macros are not used.
+
+2022-05-13 Vincent Lefevre <vincent at vinc17.net>
+
+ [acinclude.m4] Updated comment about the check of subnormal numbers.
+
+ * Removed text about DBL_HAS_SUBNORM and FLT_HAS_SUBNORM (which
+ was added in commit 3ee30bcf34bfb5d042e5a1aa9b7cf8a42b51cb91
+ on 2019-10-01) since these macros should be made obsolescent:
+ https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2981.htm
+ And their use would be incorrect in C++ (different meaning):
+ https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2988.pdf
+ * A bit more details.
+ * Added a FIXME for better cross-compiling support.
+
2022-05-10 Vincent Lefevre <vincent at vinc17.net>
doc/mpfr.texi: Updated the month.
- [NEWS] Update.
+ [NEWS] Mention the fixes of the macros of the custom interface.
2022-05-10 Vincent Lefevre <vincent at vinc17.net>
@@ -558,8 +1286,61 @@
in Section "API Compatibility" (also removed an obsolete comment
about that from src/mpfr.h).
+2022-05-08 Vincent Lefevre <vincent at vinc17.net>
+
+ Improved a comment.
+
2022-05-06 Vincent Lefevre <vincent at vinc17.net>
+ [doc/README.dev] Added text about tests of function-like macros.
+
+2022-05-06 Vincent Lefevre <vincent at vinc17.net>
+
+ In comments, changed "stack interface" to "custom interface".
+
+ * src/mpfr.h: changed "stack interface" and "mpfr_stack interface"
+ to "(the) custom interface".
+ * src/stack_interface.c: changed "mpfr_stack" to "custom interface".
+
+ The mpfr_stack_ prefix was changed to mpfr_custom_ in 2005
+ (see commit 0a010e55364d1cc3681273eee70c91dab0a61946) and
+ the MPFR manual says "Custom Interface".
+
+2022-05-06 Vincent Lefevre <vincent at vinc17.net>
+
+ Other corrections about the custom interface.
+
+ This time, the build of tstckintc was failing with "gcc -Wc++-compat"
+ because __cplusplus is not defined.
+
+ * tests/tstckintc.c: use the same solution as already done in
+ tcopysign.c (commit 3dbf3387669030b264317202806fc3d938704618),
+ i.e. ignore -Wc++-compat with "GCC diagnostic" pragmas when
+ testing with void * arguments.
+ Also simplified the code thanks to the VOIDP_CAST macro that
+ was introduced at that time (cast to void * except in C++):
+ commit 9076e47ceb41c60cab526870757f2098ced5c26d.
+
+ Everything should now be OK.
+
+2022-05-06 Vincent Lefevre <vincent at vinc17.net>
+
+ Other corrections about the custom interface.
+
+ In C++, implicit pointer conversions are forbidden. This made the
+ build of tstckintc fail with g++ and -DMPFR_USE_NO_MACRO in CFLAGS.
+
+ * src/mpfr.h: do not attempt to support implicit pointer conversions
+ with a C++ compiler in the macros, since this is not supported by
+ the functions, i.e. removed 2 useless casts; this is a bit like the
+ code like before commit 9f94e0311ed53d0c64d4fbca249d19cc4888027e.
+ * tests/tstckintc.c: test a "void *" argument instead of mpfr_ptr only
+ in C, not C++ (which cannot work if -DMPFR_USE_NO_MACRO is used).
+ Note: for newx and newx2, revert to the code that was before the
+ commit mentioned above.
+
+2022-05-06 Vincent Lefevre <vincent at vinc17.net>
+
Testsuite: C++11 compatibility (GCC's -Wliteral-suffix).
With "g++ -Werror", several .c files in the "tests" directory were
@@ -570,34 +1351,186 @@
2022-05-06 Vincent Lefevre <vincent at vinc17.net>
+ Fixed build failure of user code using mpfr_custom_get_kind() / g++.
+
+ * src/mpfr.h: added missing cast in the mpfr_custom_get_kind() macro
+ (invalid C++ code, but this is in a GNU __extension__ block, thus
+ unfortunately, it was not detected by "gcc -Werror=c++-compat";
+ see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105499>).
+
+ Bug introduced in commit 9f94e0311ed53d0c64d4fbca249d19cc4888027e.
+
+2022-05-05 Vincent Lefevre <vincent at vinc17.net>
+
Fixed issues with the macro versions of the custom interface.
- * src/mpfr.h:
- - fixed the mpfr_custom_* macros so that they behave like the
- associated functions (accept other types than those from the
- prototype, simulating implicit type conversion; evaluate each
- argument once);
- - avoid a -Wsign-conversion warning that could occur in user code
- (issue reported by Andreas Enge concerning PariTwine):
- added a cast in the mpfr_custom_get_size() macro so that a
- size_t * size_t product is done instead of mpfr_prec_t * size_t
- (where mpfr_prec_t is signed and size_t is unsigned, triggering
- a warning when GCC's -Wsign-conversion is used);
- - comments: changed "stack interface" and "mpfr_stack interface"
- to "(the) custom interface".
- * src/stack_interface.c: in a comment, changed "mpfr_stack" to
- "custom interface".
- * tests/tstckintc.c: added testcases for the macro/function mismatch
- issues, being careful with rules that are different in C and C++.
+ * src/mpfr.h: fixed issues with the mpfr_custom_* macros:
+ - a "void *" argument instead of mpfr_ptr could make the
+ compilation fail (with the function, the conversion is
+ implicit, thus this should be accepted by the macro);
+ - some arguments could be evaluated 0 times, which is wrong
+ if their evaluation has side effects.
+ * tests/tstckintc.c: added various tests to check these kinds
+ of issues.
+2022-05-05 Vincent Lefevre <vincent at vinc17.net>
+
+ Avoid a -Wsign-conversion warning that could occur in user code.
+
+ Issue reported by Andreas Enge concerning PariTwine.
+
+ * src/mpfr.h: added a cast in the mpfr_custom_get_size() macro so that
+ a size_t * size_t product is done instead of mpfr_prec_t * size_t
+ (where mpfr_prec_t is signed and size_t is unsigned, triggering a
+ warning when GCC's -Wsign-conversion is used).
+
+2022-05-05 Vincent Lefevre <vincent at vinc17.net>
+
+ Fixed mpfr_custom_get_size() macro and added non-regression test.
+
+ * src/mpfr.h: added missing cast in mpfr_custom_get_size() macro.
+ * tests/tstckintc.c: added testcases (would fail on LP64 platforms).
+
+2022-04-22 Vincent Lefevre <vincent at vinc17.net>
+
+ [mpfr-impl.h] Rounding mode macros: added assertion; updated comments.
+
+2022-04-22 Vincent Lefevre <vincent at vinc17.net>
+
+ Updated TODO to improve mpfr_pow_si/sj for negative n.
+
+ I thought that there would be some drawbacks with the underflow
+ by computing the power before the division, but this actually
+ seems to be more or less equivalent (mpfr_pow_general is already
+ used for MPFR_RNDN).
+
+ Also, removed the suggestion with rescaling as this may not be
+ possible for large values of n compared to the maximum exponent.
+
+2022-04-17 Vincent Lefevre <vincent at vinc17.net>
+
+ Corrected comment about the ".POSIX" line in all Makefile.am files.
+
+2022-04-08 Vincent Lefevre <vincent at vinc17.net>
+
+ [TODO] Added idea of implementation for to_chars.
+
2022-04-07 Vincent Lefevre <vincent at vinc17.net>
- doc/mpfr.texi: Updated the month.
+ [manual] For sqrt and rec_sqrt, mention the relation with rootn.
+ Updated TODO about rootn (now that mpfr_rootn_si is implemented).
+
2022-04-06 Vincent Lefevre <vincent at vinc17.net>
+ [src/pow_si.c] Added a static assertion and comments about code improvement.
+
+2022-04-06 Vincent Lefevre <vincent at vinc17.net>
+
[src/log_ui.c] Updated comments to better understand that the code is correct.
+ Note: these are the same as in the 4.1 branch (commit 8f357dd48).
+ So the ULONG2LONG macro was not necessary, but let's keep it for
+ maintainability. This does not change for GCC and Clang. But tcc
+ even generates shorter x86_64 code with this macro.
+
+2022-04-06 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests/tpow.c] Improved/added bad_cases tests of mpfr_pow_ui/si (x^n).
+
+ * For n odd, generate negative values y (thus x) with a probability
+ 1/2 (instead of a very low probability), as there is no reason to
+ favor positive values in this case.
+ * Added bad_cases tests of mpfr_pow_si with n negative (with the help
+ of mpfr_rootn_si). This was the TODO from commit 58fc9fb0e.
+
+2022-04-06 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests] In some bad_cases messages, output the name of the function.
+
+ This is useful for tests with several bad_cases invocations,
+ such as tpow, troot and trootn_si.
+
+2022-04-06 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests/{troot,trootn_si}.c] Added a comment about bad_cases.
+
+2022-04-05 Vincent Lefevre <vincent at vinc17.net>
+
+ Added /trootn_si to tests/.gitignore
+
+2022-04-05 Vincent Lefevre <vincent at vinc17.net>
+
+ src/root.c: for mpfr_rootn_si with k = -2, use mpfr_rec_sqrt.
+
+ The mpfr_rec_sqrt code is faster than the generic mpfr_rootn_si code
+ for k = -2.
+
+ Also added a TODO: if MPFR_WANT_ASSERT >= 2, do both computations
+ and compare the results.
+
+2022-04-05 Vincent Lefevre <vincent at vinc17.net>
+
+ tests/trootn_si.c: fixed typo in error messages.
+
+2022-04-05 Vincent Lefevre <vincent at vinc17.net>
+
+ src/pow_ui.c: bug fix with mini-gmp and limb < unsigned long.
+
+ The initial precision was too small for large values of n.
+ → tpow and trootn_si no longer fail.
+
+2022-04-05 Vincent Lefevre <vincent at vinc17.net>
+
+ tests/tpow.c: better generic tests for mpfr_pow_ui and mpfr_pow_si.
+
+ Changed INT_RAND_FUNCTION, in particular to use randulong / randlong
+ for mini-gmp, yielding an assertion failure when MINI_GMP_LIMB_TYPE
+ is shorter than "long".
+
+2022-04-05 Vincent Lefevre <vincent at vinc17.net>
+
+ mpfrlint: ignore mini-gmp in some test.
+
+2022-04-05 Vincent Lefevre <vincent at vinc17.net>
+
+ mpfr_rootn_si(): bug fix for n = LONG_MIN; added generic tests.
+
+ * src/root.c: bug fix in mpfr_rootn_si() for n = LONG_MIN
+ (integer overflow on -n, triggered by the generic tests).
+ * tests/trootn_si.c: added generic tests.
+ Note: they currently yield an assertion failure in pow_ui.c with
+ mini-gmp when MINI_GMP_LIMB_TYPE is shorter than "long".
+
+2022-04-05 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests] Add randulong and randlong functions (useful with mini-gmp).
+
+ To get a random unsigned long, randlimb() is currently used, but with
+ mini-gmp, a limb may be shorter than an unsigned long, so that one
+ does not get all the possible "unsigned long" values. So these new
+ randulong() and randlong() functions should now be used instead.
+
+2022-04-05 Vincent Lefevre <vincent at vinc17.net>
+
+ Define a ULONG2LONG() macro to convert from unsigned long to long.
+
+ The conversion is done with the two's complement rule
+ (i.e. modular arithmetic) in a portable way.
+ * doc/README.dev: mention this macro (the technique was already
+ described).
+ * src/log_ui.c: use this macro instead of non-portable code due to
+ the case n = LONG_MAX + 1.
+ * src/mpfr-impl.h: define this macro.
+
+2022-04-05 Vincent Lefevre <vincent at vinc17.net>
+
+ trootn_si.c: more mpfr_rootn_si tests on special values
+
+ doc/mpfr.texi: Updated the month.
+
+ New function mpfr_rootn_si
+
2022-04-04 Vincent Lefevre <vincent at vinc17.net>
[src/root.c] Updated a comment for mpfr_rootn_ui.
@@ -608,16 +1541,32 @@
2022-04-04 Vincent Lefevre <vincent at vinc17.net>
+ [tests/troot.c] Added a comment.
+
+ [tests/tpow.c] Added a TODO about tests with bad_cases.
+
[tests/tpow.c] Corrected messages.
+ [tests/tpow.c] For rootN, use mpfr_root and mpfr_rootn_ui randomly.
+
2022-04-04 Vincent Lefevre <vincent at vinc17.net>
+ [tests] Define RAND_BOOL() macro (random boolean) and use it.
+
+ In the tests directory:
+ * mpfr-test.h: define RAND_BOOL() macro, with type int.
+ * mpfr-test.h and various .c files: replace "randlimb () & 1" and
+ "randlimb () % 2" by "RAND_BOOL ()".
+ * tfprintf.c, tsprintf.c: use the same code as tprintf.c.
+
+2022-04-04 Vincent Lefevre <vincent at vinc17.net>
+
In the tests, fixed "randlimb () % 1", mistaken for "randlimb () & 1".
This occurred only in tests/tfmma.c (5 occurrences), with the
consequence of fewer cases of different kinds in the tests.
- Such a kind of mistake is now detected by mpfrlint (commit 02a17d21a).
+ Such a kind of mistake is now detected by mpfrlint (commit 2a90f0c91).
2022-04-04 Vincent Lefevre <vincent at vinc17.net>
@@ -626,16 +1575,29 @@
This is probably mistaken for "& 1" or "% 2", as currently in
"tests/tfmma.c".
- (same as commit 2a90f0c91b35b23bd85a8a9ceb23426e3b36b91b)
+2022-03-30 Vincent Lefevre <vincent at vinc17.net>
+ [TODO] Moved and updated item.
+
+ Since this is about functions in IEEE 754-2019, it makes more sense
+ to have this item after the new functions of IEEE 754-2008.
+
2022-03-30 Vincent Lefevre <vincent at vinc17.net>
+ [TODO] Updated item (with non-public URL removed).
+
+2022-03-29 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [TODO] added item
+
+2022-03-29 Vincent Lefevre <vincent at vinc17.net>
+
Fixed version-ext.sh, in particular when used after "./autogen.sh".
After running autogen.sh, version-ext.sh incorrectly detected files
as modified. Solution: refresh the git index before git diff-index.
-2022-03-30 Vincent Lefevre <vincent at vinc17.net>
+2022-03-28 Vincent Lefevre <vincent at vinc17.net>
[acinclude.m4] Fix/improve MPFR_CHECK_LIBM and MPFR_CHECK_LIBQUADMATH.
@@ -646,8 +1608,82 @@
Also updated MPFR_CHECK_LIBM from the current libtool.m4 code, as
done in the past.
+2022-03-24 Vincent Lefevre <vincent at vinc17.net>
+
+ [get_d128.c] Updated FIXME comment.
+
+2022-03-24 Vincent Lefevre <vincent at vinc17.net>
+
+ Added a TODO efficiency item about the size of the MPFR library.
+
+ Reduce the size of the MPFR library generated by GCC by avoiding
+ operations on _Decimal128 in get_d128.c when its encoding is BID.
+
+2022-02-18 Vincent Lefevre <vincent at vinc17.net>
+
+ [algorithms.tex] Cleanup: ^\infty → ^{\infty}
+
+ Using a command after _ (subscript) or ^ (superscript) is discouraged
+ as it might break with future TeX versions, as already seen.
+ Discussion:
+ https://tug.org/pipermail/tex-live/2022-February/047780.html
+
+2022-02-18 Vincent Lefevre <vincent at vinc17.net>
+
+ [algorithms.tex] Updated 2 URLs in comments (http → https).
+
+2022-02-03 Vincent Lefevre <vincent at vinc17.net>
+
+ Updated a comment: added a ref to WG14/N2921 about large bit-fields.
+
+2022-01-18 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/nrandom.c] added reference
+
+2022-01-18 Vincent Lefevre <vincent at vinc17.net>
+
+ Updated the FIXME in acinclude.m4 for MPFR_CHECK_LIBM.
+
+2022-01-18 Vincent Lefevre <vincent at vinc17.net>
+
+ Added FIXME in acinclude.m4 for MPFR_CHECK_LIBM.
+
+ With a GCC snapshot:
+ error: infinite recursion detected [-Werror=infinite-recursion]
+
+2022-01-14 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [TODO] removed an item (done in the web page for each release)
+
+2022-01-14 Vincent Lefevre <vincent at vinc17.net>
+
+ doc/mpfr.texi: Updated the month.
+
+2022-01-12 Vincent Lefevre <vincent at vinc17.net>
+
+ [tests] Added a comment about the output of pointer values.
+
+2022-01-10 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/README.dev] Updated "To make a release".
+
+ Added a paragraph about config.guess and config.sub.
+
2022-01-06 Vincent Lefevre <vincent at vinc17.net>
+ Added a TODO to improve mpfr_pow_si/sj.
+
+ Computing POW_U before the division (instead of after) would reduce
+ the error in the intermediate result.
+
+2022-01-06 Vincent Lefevre <vincent at vinc17.net>
+
+ Updated a comment about a clang bug.
+
+ Updated a comment about a clang bug.
+
+2022-01-06 Vincent Lefevre <vincent at vinc17.net>
+
Copyright notice update: added 2022.
Command used:
@@ -658,9 +1694,11 @@
2021-12-26 Vincent Lefevre <vincent at vinc17.net>
+ README.dev: added C2x draft URL (N2731).
+
Corrected style (spurious space before comma).
-2021-12-26 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+2021-12-21 Paul Zimmermann <Paul.Zimmermann at inria.fr>
gnu style
@@ -690,27 +1728,122 @@
be done on the full branch name, not a subword; so, added the -x grep
option (specified by POSIX).
+2021-11-25 Vincent Lefevre <vincent at vinc17.net>
+
+ Updated tests_run_within_valgrind() comment in "tests/tests.c".
+
+2021-11-23 Vincent Lefevre <vincent at vinc17.net>
+
+ README.dev: added note about the formally proven code and requirements.
+
+ Update of INSTALL file about CompCert.
+
2021-11-22 Vincent Lefevre <vincent at vinc17.net>
- Add git info for "make check".
+ doc/mpfr.texi: Updated the month.
- tests/Makefile.am: in output_info, add git info:
+2021-11-22 Vincent Lefevre <vincent at vinc17.net>
+
+ For git info output by "make check", check for modifications.
+
+ tests/Makefile.am: updated output_info code to add " (modified)"
+ when the working tree has been modified (compared to HEAD).
+
+2021-11-22 Vincent Lefevre <vincent at vinc17.net>
+
+ Added info to doc/README.dev about <branch>-root tags.
+
+2021-11-22 Vincent Lefevre <vincent at vinc17.net>
+
+ Removed a usless comment about git info output by "make check".
+
+ tests/Makefile.am: removed the comment about the unimplemented
+ solution with possible *-branch tags (I think that it would not
+ work well with merges).
+
+2021-11-22 Vincent Lefevre <vincent at vinc17.net>
+
+ Improved code to output git info from "make check".
+
+ tests/Makefile.am: updated output_info code and comment.
+ We now use <branch>-root tags to find to correct branch, by excluding
+ branches created after the current HEAD.
+
+2021-11-22 Vincent Lefevre <vincent at vinc17.net>
+
+ Fixed git info output by "make check".
+
+ tests/Makefile.am: in output_info, added a "|| true" on a shell command
+ that may fail (grep with no matches).
+
+2021-11-22 Vincent Lefevre <vincent at vinc17.net>
+
+ Added a FIXME for git info output by "make check".
+
+ The recent additions to tests/Makefile.am work well for master (and
+ detached HEAD state), but not for the 4.1 branch, where $gitb gets
+ empty, even though testing from an interactive shell (/bin/sh = dash)
+ does not show any issue.
+
+2021-11-22 Vincent Lefevre <vincent at vinc17.net>
+
+ Improved git info output by "make check".
+
+ tests/Makefile.am: modified output_info to output:
* the detected branch, which also works in detached HEAD state
- (<branch>-root tags are used to find the correct branch,
- by excluding branches created after the current HEAD);
+ (for old commits that can be found in multiple branches,
+ "master" is prefered over the other branches);
* the total commit count;
- * the commit id (hash);
- * " (modified)" when the working tree has been modified
- (compared to HEAD).
+ * the commit id (hash).
+2021-11-22 Vincent Lefevre <vincent at vinc17.net>
+
+ Add git info with "git describe" for "make check" (to be improved).
+
+ tests/Makefile.am: in output_info, add git info, but this does not
+ output the branch. For instance, on master, one gets something like
+ "4.1-root-491-g2933fad3a", and something similar on the 4.1 branch.
+ As the solution needs to work in detached HEAD state, we may want to
+ add *-branch tags to identify the first commit of a branch, and use
+ git describe --match '*-branch'
+ instead of
+ git describe --match '*-root'
+
+2021-11-15 Vincent Lefevre <vincent at vinc17.net>
+
+ Documentation: some improvements about the "decimal-point character".
+
+ * doc/README.dev: update about the use in the MPFR manual (mpfr.texi).
+ * doc/mpfr.texi: minor correction.
+
+2021-11-05 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/algorithms.tex] Add \pdfglyphtounicode{lscript}{2113} for \ell.
+
+ Otherwise one gets a grave accent (thus "s − l" cannot be found).
+ If the "ℓ" is still an issue, one could alternatively use
+ \pdfglyphtounicode{lscript}{006C}
+ to get an "l" (but "l" also matches "ℓ" in xpdf and atril).
+
+2021-11-05 Vincent Lefevre <vincent at vinc17.net>
+
+ [doc/algorithms.tex] Add some ToUnicode mappings.
+
+ This fixes some regressions compared to old LaTeX versions (in 2009).
+
2021-10-24 Vincent Lefevre <vincent at vinc17.net>
- Updated README due to the migration to Inria GitLab.
-
doc/mpfr.texi: Updated the month.
2021-10-24 Vincent Lefevre <vincent at vinc17.net>
+ mpfrlint: fixed git usage.
+
+ The change done in 52138701d9b920d608871b20d4bee30f59adede6 wasn't
+ working when the latest commit wasn't on "doc/mpfr.texi".
+
+2021-10-24 Vincent Lefevre <vincent at vinc17.net>
+
mpfrlint: update for git.
This is used to check that the doc/mpfr.texi UPDATED-MONTH value is
@@ -732,6 +1865,36 @@
It is no longer needed, as least since Texinfo 4.2:
https://ftp.gnu.org/old-gnu/Manuals/texinfo-4.2/html_node/Refilling-Paragraphs.html
+2021-10-19 Vincent Lefevre <vincent at vinc17.net>
+
+ Added .mailmap file.
+
+2021-10-17 Vincent Lefevre <vincent at vinc17.net>
+
+ Added a TODO/FIXME to add Git information to "make check".
+
+ Partial update of doc/README.dev due to the migration to Inria GitLab.
+
+ Updated README due to the migration to Inria GitLab.
+
+2021-09-27 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/mparam_h.in] Updated comment about GCC.
+
+2021-09-24 Vincent Lefèvre <vincent at vinc17.net>
+
+ [INSTALL] Update about MinGW: the old mingw.org website no longer
+ exists, and MinGW has actually been replaced by Mingw-w64, which
+ is for both 32-bit and 64-bit Windows.
+
+ [README] Updated URLs.
+
+2021-09-20 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ missing url
+
+ added new preprint
+
2021-09-16 Vincent Lefèvre <vincent at vinc17.net>
[doc/mpfr.texi] Updated the month.
@@ -746,111 +1909,289 @@
The cause is a sentence that was inserted at the wrong place in r8225
(2012-06-25).
- (merged changeset r14580 from the trunk)
+2021-09-14 Vincent Lefèvre <vincent at vinc17.net>
+ [src/inp_str.c] Added a FIXME on a deprecated use of ungetc.
+
2021-09-13 Vincent Lefèvre <vincent at vinc17.net>
- [configure.ac] Reverted r14572, which was solving an issue about the
- ordering of macros with ax_pthread.m4 29.
+ Autoconf / AX_PTHREAD related update and cleanup.
- But the change done in ax_pthread.m4 29
- https://github.com/autoconf-archive/autoconf-archive/commit/2567e0ce0f3a11b535c6b527386197fb49ff172b
- was incorrect (see comments at this URL) and was reverted in
- ax_pthread.m4 31:
- https://github.com/autoconf-archive/autoconf-archive/commit/59008cc7f85e1982eb298e1c424c2e6ad5942c4a
- (Debian/unstable had the buggy version during a couple of weeks).
+ * m4/ax_pthread.m4: update to AX_PTHREAD 31, fixing a change
+ from AX_PTHREAD 29, which has eventually been regarded as
+ a bug (workaround in r14481).
+ * configure.ac: removed the now unneeded AC_CANONICAL_TARGET;
+ updated the corresponding comment.
+2021-09-09 Vincent Lefèvre <vincent at vinc17.net>
+
+ [TODO] More about intrinsics (e.g. _addcarry_u64).
+
+ [TODO] + use intrinsics when available (needs a configure test).
+
2021-09-07 Vincent Lefèvre <vincent at vinc17.net>
+ [tests/tests.c] In a comment with a GMP_CHECK_RANDOMIZE value, mention
+ the SVN revision and date, as this value may no longer be valid in the
+ future (when tests are added or changed).
+
[tests/tests.c] Fixed bad_cases when y is ±0 (rare case).
- (merged changeset r14570 from the trunk, with GMP_CHECK_RANDOMIZE value
- in a comment changed for the current revision in the 4.1 branch)
+2021-08-23 Vincent Lefèvre <vincent at vinc17.net>
-2021-09-07 Vincent Lefèvre <vincent at vinc17.net>
+ [doc/README.dev] Updated/reduced note about MinGW and stdio.
- [configure.ac] Avoid an issue with ordering of macros we don't use
- explicitly, which appears with ax_pthread.m4 29, i.e. with
- https://github.com/autoconf-archive/autoconf-archive/commit/2567e0ce0f3a11b535c6b527386197fb49ff172b
+2021-08-23 Vincent Lefèvre <vincent at vinc17.net>
- (merged changeset r14481 from the trunk)
+ [INSTALL] Updated information about MinGW and the formatted output
+ functions (printf, etc.).
-2021-09-07 Vincent Lefèvre <vincent at vinc17.net>
+ Thanks to Pali Rohár for the information about -std=c89.
- Get rid of obsolescent AC_HEADER_TIME. Cleanup about sys/time.h usage.
+2021-08-23 Vincent Lefèvre <vincent at vinc17.net>
- The AC_HEADER_TIME macro is obsolescent in autoconf 2.69 (2012),
- and autoconf 2.71 (2021) outputs a warning, which makes autogen.sh
- fail due to "--warnings=all,error", so let's avoid the warnings.
- This macro defines TIME_WITH_SYS_TIME, used only in tests/tests.c
- (but actually not needed). We actually have two cases:
- 1. HAVE_GETTIMEOFDAY is defined: we use gettimeofday(), which
- needs <sys/time.h>.
- 2. Otherwise: we use time(), which needs <time.h>.
+ [tests/tget_set_d128.c] Removed a useless C99 comment, which makes
+ the MPFR build fail with "i686-w64-mingw32-gcc -std=c89" (e.g. via
+ ./configure --host=i686-w64-mingw32, and -std=c89 in CFLAGS).
- Based on that, we can simplify the condition in tests/tests.c for
- the inclusion of time-related headers, and we no longer need to
- check the <sys/time.h> availability. If gettimeofday() is defined
- but <sys/time.h> is not available (which shouldn't occur), then
- the current gettimeofday() usage may be incorrect anyway.
+ [tests/tsprintf.c] In locale_da_DK(), also try da_DK.utf8 (preferably):
+ in Debian/unstable, da_DK no longer exists.
- Changes:
- * acinclude.m4:
- - no longer use AC_HEADER_TIME;
- - no longer check the sys/time.h header.
- * tests/tests.c: simplify the inclusion of time-related headers.
+2021-08-20 Vincent Lefèvre <vincent at vinc17.net>
- (merged changeset r14479 from the trunk)
+ [doc/mpfr.texi] Updated the month.
-2021-06-01 Vincent Lefèvre <vincent at vinc17.net>
+ [doc/mpfr.texi] Corrected latest change (typography).
+ [doc/mpfr.texi] Detail the mpfr_min and mpfr_max description.
+
+2021-08-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tget_flt.c] Avoid a warning about unused function equal_flt
+ when HAVE_SUBNORM_FLT is not defined.
+
+ [tests/tget_flt.c] Code style: replaced "… == 0" by "! …" on
+ the Boolean _p functions.
+
+2021-08-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tget_flt.c] Removed bug_icx (duplicate test).
+
+ What was tested was just mpfr_get_flt on a NaN mpfr_t. But this was
+ already tested in main(). And one gets the same result and error with
+ icx (without -fp-model=strict). Moreover, the old test was correctly
+ protected by "#if !defined(MPFR_ERRDIVZERO)", needed because NaN is
+ defined by 0.0 / 0.0.
+
+2021-08-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tget_flt.c] In bug_icx: replaced mpfr_set_flt, whose float
+ argument was yielding an underflow (not portable), by mpfr_set_si_2exp
+ (it is mpfr_get_flt that is tested, not mpfr_set_flt).
+
+ [tests/tget_flt.c] Added FIXME for test added in r14552.
+
+ [tests/tget_flt.c] Portability correction.
+
+2021-08-03 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ need -fp-model=strict for icx
+
+2021-07-27 Vincent Lefèvre <vincent at vinc17.net>
+
+ [TODO] Mention "[[noreturn]]".
+
+2021-07-15 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/ieee_floats.h] URL update (http → https).
+
+2021-07-01 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tools/mpfrlint] Detect when the return value of fclose() or fflush()
+ is compared with -1 instead of EOF.
+
+2021-06-30 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tprintf.c] Portability correction (EOF is not necessarily -1).
+
+2021-06-21 Vincent Lefèvre <vincent at vinc17.net>
+
+ Punctuation (missing comma after "however").
+
+ [doc/README.dev] No longer use /tmp in examples so that the reader is
+ not encouraged to use it. Punctuation.
+
+2021-06-08 Vincent Lefèvre <vincent at vinc17.net>
+
+ [acinclude.m4] Fixed subnormal detection (issue found with icx).
+
+2021-06-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tget_d.c] Improved error messages.
+
+2021-06-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tget_d.c] Error message when check_inf_nan() fails for NaN.
+
+ Note: With "icx -O2" (at least), 8 tests are now failing with
+ Intel(R) oneAPI DPC++ Compiler 2021.2.0 (2021.2.0.20210317).
+ But no failures when the compiler is invoked as "clang".
+
+2021-06-02 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Updated the month.
+
+2021-06-02 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [doc/mpfr.texi] some figures about slowdown with C++ interface
+
+2021-06-01 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [tests/data/j1] added more tests
+
[tests/tests.c] fixed bug introduced in r13787, which invalidated data_check
in some cases
- (merged changeset r14531 from the trunk)
+2021-05-20 Vincent Lefèvre <vincent at vinc17.net>
+ [doc/mpfr.texi] Completed mpfr_fmodquo and mpfr_remquo description.
+
+ [src/rem1.c] Improved comments.
+
2021-05-17 Vincent Lefèvre <vincent at vinc17.net>
- [tests/tsprintf.c] Commented out a test added in r14524.
+ [tests/tsprintf.c] Cosmetic revert of blank line removal in r14519.
- This test of length specifier 'P' with an empty precision field (only a
- period) fails in the 4.1 branch due to an issue fixed only in the trunk
- (r14155). In the 4.1 branch, the MPFR manual contains contradictory
- information about this, which can be regarded as unspecified behavior.
-
2021-05-17 Vincent Lefèvre <vincent at vinc17.net>
- Formatted output functions (mpfr_*printf): bug fix; added tests.
+ [src/vasprintf.c] Fixed buffer_cat: replaced incorrect assertion len > 0
+ by a test.
- * src/vasprintf.c: in buffer_cat, replaced incorrect assertion len > 0
- by a test.
- Note that len == 0 is possible when outputting an integer 0
- (either a native one or mpfr_prec_t) with precision field = 0.
- The consequence of this bug:
- - In debug mode (MPFR_ASSERTD assertion checking), one would get
- an assertion failure.
- - Otherwise, there should be no side effects since the code was
- valid for len == 0, possibly except with LTO (very unlikely,
- though).
- This incorrect assertion was added on 2009-03-13 in r6099.
- * tests/tsprintf.c: added tests of native integer 0 and mpfr_prec_t
- (specifier 'P') with precision field 0, both yielding a call to
- buffer_cat with len = 0.
+ Note that len == 0 is possible when outputting an integer 0 (either a
+ native one or mpfr_prec_t) with precision field = 0. The consequence
+ of this bug:
+ * In debug mode (MPFR_ASSERTD assertion checking), one would get an
+ assertion failure.
+ * Otherwise, there should be no side effects since the code was valid
+ for len == 0, possibly except with LTO (very unlikely, though).
- (merged changesets r14514,14520-14521 from the trunk)
+ This incorrect assertion was added on 2009-03-13 in r6099.
2021-05-17 Vincent Lefèvre <vincent at vinc17.net>
- [doc/mpfr.texi] Updated the month.
+ [tests/tsprintf.c] Similarly to r14514, added tests of native integer 0
+ with precision field 0 (also yields a call to buffer_cat with len = 0).
-2021-05-17 Vincent Lefèvre <vincent at vinc17.net>
+ [tests/tsprintf.c] For various test functions, changed the return type
+ from int to void (when the value is never used).
+2021-05-16 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/vasprintf.c] Updated comment about the output for the 'a'/'A'
+ conversion specifier.
+
+ [doc/mpfr.texi] Formatted output functions (mpfr_*printf): completed
+ the specification concerning the precision (this was needed because
+ the conversion specifier 'b' does not exist in C).
+
+2021-05-12 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/vasprintf.c] Added a comment about the output for the 'a'/'A'
+ conversion specifier, which is completely unintuitive. FIXME?
+
[doc/mpfr.texi] Punctuation.
- (merged changeset r14515 from the trunk)
+ [tests/tsprintf.c] Added tests of specifier 'P' with precision field 0.
+2021-05-11 Vincent Lefèvre <vincent at vinc17.net>
+
+ [TODO] More about mpfr_fda / mpfr_fds.
+
+ [TODO] + Fused divide-add and fused divide-subtract (mpfr_fda, mpfr_fds).
+
+2021-05-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi,src/mpfr.h] Detail about the mpfr_pown implementation.
+
+2021-05-03 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [NEWS] added missing mpfr_pown (alias for mpfr_pow_sj)
+
+ [manual] added mpfr_powm in NEWS
+ (https://sympa.inria.fr/sympa/arc/mpfr/2021-05/msg00000.html)
+
+2021-05-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Updated the month (due to r14505).
+
+2021-04-30 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/sin.c] Added a TODO about range reduction.
+
+2021-04-26 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tstrtofr.c] Check more infinity strings.
+
+2021-04-26 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc] Update about "case insensitive" and issue with Turkish locales
+ for "I" / "i".
+
+ * mpfr.texi: added "with the rules of the C locale" in the
+ mpfr_strtofr description.
+ * README.dev: completed information about Turkish locales.
+
+2021-04-24 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tpowr.c] Added generic tests.
+
+ [src/exceptions.c] Corrected latest comment.
+
2021-04-23 Vincent Lefèvre <vincent at vinc17.net>
+ [src/exceptions.c] Replaced comment about logging (the issue was due to
+ the mpfr_check_range macro).
+
+ [src/exceptions.c] Completed comment about a logging issue.
+
+ [src/exceptions.c] Added a comment about a logging issue.
+
+ [src/mpfr-impl.h] Logging: output the flags at "IN" and "OUT".
+
+ [tests/tsgn.c] Also test in a very reduced exponent range.
+
+ [tests/tsgn.c] Also test the flags.
+
+2021-04-23 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/get_str.c] Fixed bug in mpfr_get_str_ndigits introduced in r14494.
+
+ Note: the issue (an uninitialized variable) was detected by GCC 6.5.0;
+ recent GCC versions miss the -Wmaybe-uninitialized warning.
+
+2021-04-23 Vincent Lefèvre <vincent at vinc17.net>
+
+ mpfr_get_str_ndigits: added an assertion / exploitable compiler hint.
+
+ [src/get_str.c] Improved mpfr_get_str_ndigits code structure.
+
+2021-04-23 Vincent Lefèvre <vincent at vinc17.net>
+
+ In various functions, use mpfr_equal_p() instead of mpfr_cmp() == 0.
+
+ Note: In these cases, the test should be false if one of the arguments
+ is NaN (it is not always clear whether NaN is impossible, but just in
+ case, mpfr_equal_p is safer, in particular if the code around changes;
+ and this is more readable too).
+
+2021-04-23 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/get_str.c] Use mpfr_equal_p() instead of mpfr_cmp() == 0.
+
+ [tests] Added tpowr to svn:ignore property.
+
+2021-04-23 Vincent Lefèvre <vincent at vinc17.net>
+
Fixed bug in mpfr_get_str_ndigits.
* src/get_str.c: use MPFR_SAVE_EXPO_MARK / MPFR_SAVE_EXPO_FREE to fix
@@ -861,14 +2202,92 @@
[*] https://sympa.inria.fr/sympa/arc/mpfr/2021-04/msg00000.html
- (merged changeset r14488 from the trunk)
+2021-04-16 Vincent Lefèvre <vincent at vinc17.net>
+ [src/mpfr-impl.h] Added cast to int for __LINE__ in formatted output.
+
+ The standard just says that __LINE__ in an integer constant. So its
+ type might be larger than int, even though the value is representable
+ in an int (like in MPFR). This concerns logging code, only available
+ for GCC compatible compilers, so that there should not be any issue
+ without the cast, but just in case...
+
+2021-04-02 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [tests/thypot.c] added one test
+
+2021-03-19 Vincent Lefèvre <vincent at vinc17.net>
+
+ Added m4/ax_pthread.m4 file, and related updates.
+
+ Added m4/ax_pthread.m4 from
+ https://github.com/autoconf-archive/autoconf-archive
+ and updated:
+ * acinclude.m4 (in particular, set CXX and CXXFLAGS)
+ * doc/README.dev
+
+2021-03-19 Vincent Lefèvre <vincent at vinc17.net>
+
+ [configure.ac] Avoid an issue with ordering of macros we don't use
+ explicitly, which appears with ax_pthread.m4 29, i.e. with
+ https://github.com/autoconf-archive/autoconf-archive/commit/2567e0ce0f3a11b535c6b527386197fb49ff172b
+
+2021-03-18 Vincent Lefèvre <vincent at vinc17.net>
+
+ [acinclude.m4] Added a comment about AX_PTHREAD.
+
+2021-03-18 Vincent Lefèvre <vincent at vinc17.net>
+
+ Get rid of obsolescent AC_HEADER_TIME. Cleanup about sys/time.h usage.
+
+ The AC_HEADER_TIME macro is obsolescent in autoconf 2.69 (2012),
+ and autoconf 2.71 (2021) outputs a warning, which makes autogen.sh
+ fail due to "--warnings=all,error", so let's avoid the warnings.
+ This macro defines TIME_WITH_SYS_TIME, used only in tests/tests.c
+ (but actually not needed). We actually have two cases:
+ 1. HAVE_GETTIMEOFDAY is defined: we use gettimeofday(), which
+ needs <sys/time.h>.
+ 2. Otherwise: we use time(), which needs <time.h>.
+
+ Based on that, we can simplify the condition in tests/tests.c for
+ the inclusion of time-related headers, and we no longer need to
+ check the <sys/time.h> availability. If gettimeofday() is defined
+ but <sys/time.h> is not available (which shouldn't occur), then
+ the current gettimeofday() usage may be incorrect anyway.
+
+ Changes:
+ * acinclude.m4:
+ - no longer use AC_HEADER_TIME;
+ - no longer check the sys/time.h header.
+ * tests/tests.c: simplify the inclusion of time-related headers.
+
+2021-03-18 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tools/mpfrlint] Detect mpn_mul_n with identical 2nd and 3rd arguments,
+ which can be replaced by the faster mpn_sqr.
+
+2021-03-16 Vincent Lefèvre <vincent at vinc17.net>
+
+ Replaced "intensional" by "intentional" in comments.
+
+ Untabify and remove trailing spaces.
+
+2021-03-16 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/rec_sqrt.c] replace a call to mpn_mul_n with identical arguments by
+ a call to mpn_sqr + similar changes in other files
+ (thanks Fredrik Johansson)
+
+ [tests/trec_sqrt.c] added timing test
+
2021-03-09 Vincent Lefèvre <vincent at vinc17.net>
[doc/mpfr.texi] Updated the month.
-2021-03-09 Vincent Lefèvre <vincent at vinc17.net>
+ [src/mpfr.h] Comment: no need to write "user" with uppercase letters.
+2021-03-08 Vincent Lefèvre <vincent at vinc17.net>
+
[tests/{tset_si.c,tset_sj.c}] Fix when -DMPFR_USE_NO_MACRO is used.
The mpfr_get_exp() function checks that the argument is a regular
@@ -882,92 +2301,824 @@
mpfr_get_exp has been replaced by MPFR_GET_EXP, so that the argument
is checked with --enable-assert.
- (merged changeset r14464 from the trunk)
+2021-03-08 Vincent Lefèvre <vincent at vinc17.net>
-2021-03-09 Vincent Lefèvre <vincent at vinc17.net>
+ [tests/{texceptions.c,tset_exp.c}] Forgot to protect the tests with
+ casts to "void *", invalid in C++ (completing r14460 and r14461).
- In mpfr.h, fixed some macros implementing functions. Added tests.
+2021-03-08 Vincent Lefèvre <vincent at vinc17.net>
- * src/mpfr.h:
- - Macros mpfr_nan_p, mpfr_inf_p, mpfr_zero_p, mpfr_regular_p,
- mpfr_get_prec, mpfr_get_exp, mpfr_copysign and mpfr_signbit
- yielded a compilation error when the argument (the 3rd one
- for mpfr_copysign) was of type void *, for instance.
- - Macro mpfr_set had the same issue with the 2nd argument, but
- also evaluated this argument twice. The fix was possible only
- with a GNU extension. Thus this macro is available only with
- GCC and compatible compilers (see __GNUC__); otherwise, the
- mpfr_set function is used.
- * src/ubf.c: added a missing cast (this issue became visible with
- the fix of the mpfr_get_prec macro).
- * tests/mpfr-test.h: added macros for the new tests (tests with
- void * arguments are invalid in C++ and they trigger a warning
- with GCC's -Wc++-compat, so we need to avoid these issues).
- * tests/*.c: added tests to check that some calls (potentially
- macros) behave like function calls. In detail:
- - tcopysign.c: mpfr_copysign and mpfr_setsign.
- - texceptions.c: mpfr_get_prec.
- - tisnan.c: mpfr_nan_p, mpfr_inf_p, mpfr_number_p (though not
- currently concerned here), mpfr_zero_p and mpfr_regular_p.
- - tset.c: mpfr_set.
- - tset_exp.c: mpfr_get_exp.
- * doc/mpfr.texi: added some text in Section "Custom Interface" to
- clarify the usage of macros for this interface.
+ Clarification about the custom interface and macros.
- (merged changesets r14447-14463 from the trunk)
+ * doc/mpfr.texi: added some text in Section "Custom Interface".
+ * src/mpfr.h: replaced the remaining FIXME by another comment.
-2021-03-09 Vincent Lefèvre <vincent at vinc17.net>
+2021-03-08 Vincent Lefèvre <vincent at vinc17.net>
- Completed tests/tcopysign.c to test with a reused argument.
+ [tests] Ignore GCC's -Wc++-compat in the tests that are invalid in C++
+ (these tests are enabled only if __cplusplus is not defined).
- (merged part of changeset r14227 from the trunk)
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+ [tests] In C++, do not cast to "void *" in the tests of macros.
+
+ These casts make the build of these tests fail with a C++ compiler.
+ But this means that the use of macros will not introduce any issue
+ concerning the type of the arguments, i.e. with a C++ compiler, the
+ tests are still complete after this change.
+
+ However, GCC's -Werror=c++-compat still cannot be used.
+ To avoid this issue, diagnostic pragmas will be needed.
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/mpfr.h] Fixed mpfr_set macro (now only available with __GNUC__).
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tset.c] Added tests of the mpfr_set macro.
+
+ Without MPFR_USE_NO_MACRO, the compilation currently fails because
+ the second argument is not converted to mpfr_srcptr when MPFR_SIGN
+ is applied.
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/mpfr.h] Fixed mpfr_copysign and mpfr_signbit macros.
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ Added tests of mpfr_copysign, mpfr_setsign and mpfr_signbit macros.
+
+ Without MPFR_USE_NO_MACRO, the compilation of these tests in tcopysign.c
+ currently fails because some arguments are not converted to mpfr_srcptr.
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/ubf.c] Forgot a cast from UBF pointer to mpfr_t pointer.
+
+ This became visible with the fix of the mpfr_get_prec macro in r14454.
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/mpfr.h] Fixed mpfr_get_prec and mpfr_get_exp macros.
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ Added tests of mpfr_get_prec and mpfr_get_exp macros.
+
+ Without MPFR_USE_NO_MACRO, the compilation of these tests
+ in texceptions.c and tset_exp.c currently fails because
+ the argument is not converted to mpfr_srcptr.
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/mpfr.h] Better implementation of macros changed in r14451.
+ __GNUC__ is no longer needed.
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/mpfr.h] Fixed some macros implementing functions.
+
+ Macros mpfr_nan_p, mpfr_inf_p, mpfr_zero_p and mpfr_regular_p were
+ incorrect since they yielded a compilation error when the argument
+ was of type void *, for instance. Their definition as macros is now
+ available only with __GNUC__.
+ The tisnan test r14448 should no longer fail.
+
+ Also added a comment for mpfr_sgn, which is correct since documented
+ as a macro.
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tisnan.c] Added commented code for testing compilation errors.
+
+2021-03-06 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/mpfr.h] fixed typo
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tisnan.c] Check that when mpfr_nan_p, mpfr_inf_p, mpfr_number_p,
+ mpfr_zero_p and mpfr_regular_p is implemented as a macro, it behaves
+ like a function.
+
+ [src/mpfr.h] Added a comment and a FIXME for functions implemented
+ as macros.
+
+2021-03-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ Reverted r14445: This is about functions implemented as macros, and
+ in this case, a macro must behave like a function.
+
+ In particular, each argument must be evaluated one time exactly.
+ Macros that behave differently will need to be fixed.
+
+ Tests should also be added like the one in tests/tset_si.c with the
+ comment:
+
+ /* Note: the ++'s below allow one to check that the corresponding
+ arguments are evaluated only once by the macros. */
+
+2021-03-06 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [doc/mpfr.texi] document that functions defined as macros might evaluate
+ their arguments several times
+ (see https://sympa.inria.fr/sympa/arc/mpfr/2021-03/msg00007.html)
+
+ [src/mpfr.h] fixed typo
+
+2021-03-04 Vincent Lefèvre <vincent at vinc17.net>
+
+ [TODO] Clarification.
+
+ [TODO] Updated item on pkg-config due to a bug in pkg-config.
+
+ [TODO] Added "add some option to use pkg-config...".
+
+2021-02-16 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/invsqrt_limb.h] use "unsigned short" for table T[] instead of mp_limb_t.
+ On araignee.loria.fr, this saves about 1 cycle, when GMP 6.2.1 and MPFR are
+ configured with --disable-shared, using mbench.
+
+ Before this change (medium of 5 runs, with turbo-boost disabled):
+ $ numactl --physcpubind=0 ./mfv5 -i0 -p53 mpfr_sqrt mpfr_sqrt mpfr_sqrt
+ mpfr_sqrt: 48 / 53.39 / 60
+ $ numactl --physcpubind=0 ./mfv5 -i0 -p113 mpfr_sqrt mpfr_sqrt mpfr_sqrt
+ mpfr_sqrt: 75 / 81.44 / 89
+
+ After this change:
+ $ numactl --physcpubind=0 ./mfv5 -i0 -p53 mpfr_sqrt mpfr_sqrt mpfr_sqrt
+ mpfr_sqrt: 48 / 52.37 / 60
+ $ numactl --physcpubind=0 ./mfv5 -i0 -p113 mpfr_sqrt mpfr_sqrt mpfr_sqrt
+ mpfr_sqrt: 75 / 80.27 / 88
+
2021-02-15 Vincent Lefèvre <vincent at vinc17.net>
- [src/jyn_asympt.c] Fixed bug when s=0 at the end of the for loop.
[tests/mpfr-test.h] Added mpfr_cmp_si_2exp0 macro (check NaN).
- [tests/tj1.c] Added testcase.
- (merged changesets r14431,14434 from the trunk)
+ [tests/tj1.c] Replaced mpfr_cmp_si_2exp by mpfr_cmp_si_2exp0.
- [src/digamma.c] Fixed a bug in mpfr_digamma_reflection.
- [tests/tdigamma.c] Added testcase.
- (merged changesets r14430,14432-14433 from the trunk)
+ [tests/tdigamma.c] Use mpfr_cmp_ui0 to detect NaN.
+ [src/digamma.c] Use MPFR_NOTZERO instead of !MPFR_IS_ZERO.
+
+2021-02-15 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/jyn_asympt.c] fixed bug when s=0 at the end of the for loop
+ [tests/tj1.c] added corresponding non-regression test
+
+ [src/digamma.c] fixed a bug in mpfr_digamma_reflection when the approximations
+ of Digamma(1-x) and Pi*cot(Pi*x) cancel exactly
+ [tests/tdigamma.c] added corresponding non-regression test
+
+ renamed mpfr_compound to mpfr_compound_si, since in C2X, compoundn takes
+ an intmax_t and not a long, thus we can later implement mpfr_compoundn
+ taking as input an intmax_t
+
2021-02-10 Vincent Lefèvre <vincent at vinc17.net>
- [src/jyn_asympt.c] Fixed bug when sin(z)±cos(z) rounds to 0.
- [tests/tj0.c] Testcase.
- (merged changesets r14400,14405 from the trunk)
+ [tests/texpm1.c] Improved special tests.
- [src/digamma.c] Fixed bug in mpfr_digamma_positive when t-u is zero.
- [tests/tdigamma.c] Testcase.
- (merged changesets r14399,14401-14404 from the trunk)
+2021-02-09 Paul Zimmermann <Paul.Zimmermann at inria.fr>
- [src/digamma.c] Fixed bug in mpfr_digamma: if x is large, the
- intermediate precision can be large. This issue may still occur,
- but with a very low probability.
- [tests/tdigamma.c] Testcase.
- (merged changesets r14391-14398 from the trunk)
+ [src/pow_sj.c] removed spurious comment
2021-02-09 Vincent Lefèvre <vincent at vinc17.net>
- [src,tests] Consistency: in prototypes, changed
- const mpfr_t to mpfr_srcptr,
- mpfr_t to mpfr_ptr,
- mpz_t to mpz_ptr,
- mpfr_random_deviate_t to mpfr_random_deviate_ptr,
- in order to silence a warning from the future GCC 11 -Warray-parameter
- option (included in -Wall).
+ [src/{pow_sj.c,pow_uj.c}] Added missing "#ifdef _MPFR_H_HAVE_INTMAX_T".
- This warning was making the MPFR build fail in combination with -Werror
- (useful for testing), and there was no simple way to get rid of it in a
- way independent of the GCC version (due to GCC bug 86134 / 99014, which
- could also silently change the detected features in configure tests).
- And as this inconsistency was also present in mpfr.h, this fix may also
- benefit the build of software that uses MPFR.
+ [doc/mpfr.texi] General cleanup, in particular related to the IEEE 754
+ standard. Added IEEE Standard 754-2019 to the references.
- (merged changesets r14103,14154 from the trunk)
+ [src/pow_{si,sj,ui,uj}.c] Fixed logging for mpfr_pow_{sj,uj}.
+ [src/pow_uj.c] untabify
+
+ [tests/tpow.c] Replaced mpfr_cmp_ui by versions that can detect NaN.
+ Note: this is particularly important to check that pow(NaN,0) returns 1,
+ not NaN.
+
+ [src/pow_uj.c] Some corrections in the mpfr_mpz_set_uj helper function,
+ still with limitations (which could be avoided by sharing code with
+ mpfr_set_uj_2exp).
+
+2021-02-09 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ forgot to commit those files
+
+ added mpfr_powr
+
+2021-02-09 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/{pow_si.c,pow_ui.c}] untabify
+
+2021-02-09 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ added mpfr_pow_uj and mpfr_pow_sj
+ now mpfr_pown is an alias for mpfr_pow_sj
+
+2021-02-09 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi,src/mpfr.h] Added a FIXME for mpfr_pown, which should
+ be an alias of mpfr_pow_sj (not implemented yet) to follow ISO C2x,
+ where pown is defined with intmax_t n.
+
+2021-02-09 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ added mpfr_pown (alias for mpfr_pow_si)
+
+2021-02-08 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/mpfr.h] Updated comments on the types for mpfr_prec_t/mpfr_exp_t.
+
+ * For mpfr_prec_t, removed the comment saying that under Windows 64,
+ "long long" could be used (this would imply that mpfr_prec_t and
+ mpfr_exp_t will not fit in a long, and this is not supported yet,
+ see below).
+
+ * For mpfr_exp_t and _MPFR_EXP_FORMAT == 4, changed an unclear note
+ and added other information; in particular, this value is currently
+ not supported since the MPFR code assumes that mpfr_exp_t fits in a
+ long.
+
+2021-02-08 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests] Added texp2m1 and texp10m1 to svn:ignore property.
+
+ [src/jyn_asympt.c] Use mpfr_set4 instead of mpfr_set or mpfr_neg.
+
+ [tests/tj0.c] Latest test: also check the flags.
+
+ [src/digamma.c] Added a comment about the bug fixed in r14399.
+
+ [tests/tdigamma.c] Latest test: also check the flags.
+
+ [tests/tdigamma.c] Moved the r14399 test to its own test function.
+ Note: for this one, there is no need to use the maximum exponent range.
+
+ [src/digamma.c] Use MPFR_NOTZERO instead of !MPFR_IS_ZERO.
+
+2021-02-08 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/jyn_asympt.c] fixed bug when sin(z)+cos(z) or sin(z)-cos(z) round to 0
+ [tests/tj0.c] added corresponding non-regression test
+
+ [src/digamma.c] fixed bug in mpfr_digamma_positive when t-u is zero
+ [tests/tdigamma.c] added corresponding non-regression test
+
+2021-02-08 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/digamma.c] Fix: increased GUARD from 20 to 30.
+ [tests/tdigamma.c] Added 2 precisions for which GUARD=20 is not
+ sufficient, yielding a "too much memory" error.
+
+2021-02-07 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/digamma.c] Punctuation in a comment.
+
+2021-02-07 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/digamma.c] fixed bug20210206
+
+2021-02-06 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/digamma.c] Added a FIXME for mpfr_digamma_positive: q can be
+ too large, e.g. equal to the maximum exponent!
+
+ [src/digamma.c] In mpfr_digamma_positive, log the value of q.
+
+ [src/digamma.c] In mpfr_digamma_positive, do not compute the precision q
+ until we are certain that it will be used.
+
+ [src/digamma.c] In mpfr_digamma_positive, added an assertion, as a
+ precision is set from the exponent of x, and I suppose that it may
+ be larger than MPFR_PREC_MAX when mpfr_exp_t > mpfr_prec_t.
+
+ [tests/tdigamma.c] Added testcase for a bug found by test_generic.
+
+ [tests/tgeneric.c] Added debug info.
+
+2021-02-05 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/exp2m1.c] Use block-level flags.
+
+2021-02-05 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ added new function mpfr_exp10m1
+
+ [tests/texp2m1.c] added a test for exact values
+
+2021-02-05 Vincent Lefèvre <vincent at vinc17.net>
+
+ [TODO] Added mpfr_mul_uj and mpfr_mul_sj.
+
+ [src/log.c] Optimization: avoid a temporary variable for a*2^m;
+ use an alias to a instead. In corner cases, this could yield a
+ new internal TMD for the mpfr_div when the precision of a is
+ very large, but this is avoided by changing the RNDN to RNDF.
+ The error bound of 2 ulp on the mpfr_div should still be valid
+ (it should now actually be 1 ulp).
+
+2021-02-05 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ added new function mpfr_exp2m1 for 2^x-1
+
+2021-02-05 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tversion.c] Fixed length modifier in error messages.
+
+ [src/log10p1.c] In mpfr_log10p1_small: an "else" case is better than
+ a "goto"; do not initialize inex to an arbitrary value.
+
+ [src/compound.c] Exact cases: additional detail in the comment.
+
+ [src/compound.c] Exact cases: this is simpler without a separate
+ function (the t = 0 was artificial). Added full explanations.
+
+2021-02-05 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/compound.c] removed FIXME corresponding to previous commit
+
+ [src/compound.c] fixed infinite loop for exact results like compound(0.5,2)
+ which are not powers of 2
+
+2021-02-05 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/compound.c] Fixed 2 issues with mpfr_compound_near_one:
+ * this function must be called in the extended exponent range,
+ to be sure that 1 is representable;
+ * it wasn't setting the inexact flag, and this is now done via
+ mpfr_check_range.
+
+ [src/compound.c] Added missing MPFR_ZIV_FREE before the "return" in
+ the Ziv loop.
+
+ [tests/tcompound.c] Added generic tests with n = 2 and n = 3.
+ They trigger a failure: bad inexact flag for mpfr_compound2.
+
+ [src/compound.c] Added a FIXME: possible infinite loop when the result
+ is exact.
+
+ [src/compound.c] Optimize the easy case n = 1.
+
+ [src/compound.c] Special cases: fixed compound(-Inf,0) and improved
+ comments.
+
+ [tests/tcompound.c] More tests of compound(x,n) for x < -1, showing
+ a failure on compound(-Inf,0).
+
+ [doc/README.dev] Note that the logging feature (--enable-logging)
+ needs GCC to build MPFR, and it is not available with mini-gmp,
+ since mpfr_fprintf cannot be defined with mini-gmp.
+
+2021-02-04 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tcompound.c] Fixed a test in the case mpfr_exp_t < long.
+
+ [tests/tcompound.c] Corrected an error message.
+
+ [src/compound.c] Fixed bug found by clang:
+ compound.c:32:29: error: use of logical '||' with constant operand [-Werror,-Wconstant-logical-operand]
+ if (rnd_mode == MPFR_RNDN || MPFR_RNDF
+ ^ ~~~~~~~~~
+
+ [tests/tatan2u.c] Fixed a bug (as of C99, for *decimal* constants, one
+ must use a suffix that contains "U" if the constant cannot be signed).
+
+ [tests/tcompound.c] Corrected the conditions of a test for machines
+ with 32-bit long. Added comments.
+
+ [tests] Added tlog10p1 to svn:ignore property.
+
+ [tests/tatan2u.c] Improved comment in bug20210203 about type sizes.
+
+ [tests/tatan2u.c] Make sure that the bug20210203 test is run only
+ when the value for u is representable.
+
+2021-02-04 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [TODO] added section number
+
+ [src/compound.c] fixed case n < 0 and underflow
+ [tests/tcompound.c] added corresponding non-regression tests
+
+ compound(NaN,0) is 1
+
+2021-02-04 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/compound.c] Correction for n = LONG_MIN. Added FIXMEs.
+
+2021-02-04 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [tests/tcompound.c] fixed comment
+
+2021-02-03 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/atan2u.c] fixed error analysis
+
+2021-02-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/compound.c] Portability.
+
+ [tests/tatan2u.c] Make sure that 64-bit constants are supported before
+ using one.
+
+ [src/log10p1.c] Improved checking / debugging support.
+
+2021-02-03 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [tests/tatan2u.c] added a test which currently fails
+
+ [src/log2p1.c] added note about underflow
+
+ added a new function mpfr_log10p1 to compute log10(1+x)
+
+ [tests/tlog2p1.c] set the precision locally to one test
+
+ [doc/mpfr.texi] document atan2u and atan2pi
+
+2021-02-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Typography.
+
+ [doc/mpfr.texi] In Section "Added Functions", do not put the patchlevel
+ in MPFR versions (changed "4.2.0" to "4.2").
+
+ [src/log2p1.c] Bug fix: memory accessed after it is cleared.
+
+ [src/log2p1.c] More logging.
+
+2021-02-03 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [doc/mpfr.texi] document mpfr_compound
+
+2021-02-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/set_prec.c] Log the precision.
+
+2021-02-03 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/compound.c] completed the general case
+ [tests/tcompound.c] added one hard-coded test
+
+2021-02-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests] Added tcompound and tlog2p1 to svn:ignore property.
+
+ [tests/tlog2p1.c] Use mpfr_cmp_si0 to detect NaN.
+
+ [tests/tcompound.c] Do not use mpfr_printf in the tests.
+
+2021-02-03 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/log2p1.c] use ULSIZE as in atan2u.c
+
+ [src/atan2u.c] better explain the choice of prec in mpfr_atan2u_aux3
+
+2021-02-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/compound.c] Fixed logging.
+
+2021-02-03 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/atan2u.c] simplified code
+
+2021-02-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/atan2u.c] Support unsigned long != 64-bit type. Avoid a warning.
+
+2021-02-03 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [tests/tlog2p1.c] added tests for exact cases
+
+ added log2p1 and compound (mpfr_compound is not finished yet)
+
+ [src/log1p.c] fixed comment
+
+ [src/atan2u.c] deal with underflow and overflow in y/x
+
+2021-02-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/atan2u.c] Added a FIXME: the code is incorrect if y/x yields
+ an overflow or an underflow.
+
+ [src/atan2u.c] Fixed 2 bugs in mpfr_atan2u_aux2. Minor changes.
+
+ [src/atan2u.c] Minor corrections in comments.
+
+2021-02-02 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests] Added tatan2u and tatanu to svn:ignore property.
+
+ [tests/tatan2u.c] Do not use mpfr_printf in the tests.
+
+ [src/atan2u.c] Use MPFR_RET_NEVER_GO_HERE.
+
+ [tests]
+ * tgeneric.c: cleanup about the type of the arguments; added support
+ for functions with 3 arguments (x1,x2,u), such as mpfr_atan2u.
+ * tatan2u.c: enabled the generic tests (test_generic).
+
+2021-02-02 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/atan2u.c] fixed atan2u with respect to the four quadrants
+ [tests/tatan2u.c] added corresponding non-regression tests
+
+ added mpfr_atan2u (work in progress)
+
+ [src/atanu.c] fixed bug for u=0
+ [tests/tatanu.c] added non-regression test case
+
+2021-02-02 Vincent Lefèvre <vincent at vinc17.net>
+
+ Changed "plus/minus infinity" to "positive/negative infinity".
+
+ [tools/mpfrlint] In the "+/- infinity" test (just added), also check
+ the doc/algorithms.tex file.
+
+ [tools/mpfrlint] Added a test for the use of "plus/minus infinity"
+ instead of "positive/negative infinity".
+
+ [doc/mpfr.texi] Minor corrections related to infinity. The IEEE 754-2019
+ standard says "positive/negative infinity", not "plus/minus infinity".
+
+2021-02-01 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Typos.
+
+ [{src,tests}/Makefile.am] Untabified values of variables to avoid
+ wrapping in diffs on 80 columns.
+
+2021-02-01 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [TODO] asinpi, acospi and atanpi are done (and their *u variants)
+
+ [src/atanu.c] added comment
+
+ [src/acosu.c] simplified the code when x is tiny
+
+ added mpfr_atanu and mpfr_atanpi
+
+2021-02-01 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Correction about mpfr_get_* and NaN.
+
+2021-02-01 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/asinu.c] improved a comment
+
+ [src/asinu.c] fixed typo
+
+ [src/asinu.c] resolved FIXME
+ [tests/tasinu.c] added more underflow tests
+
+2021-02-01 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/set_ld.c] Replaced a useless goto.
+
+ Code readability.
+
+2021-02-01 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/set_ld.c] added comment about LONGDOUBLE_NAN_ACTION
+
+2021-02-01 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Typography.
+
+ [doc/mpfr.texi] Updated the month.
+
+2021-02-01 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/get_ld.c] forgot get_ld in previous commit
+
+ make it clear that we don't propagate the sign bit in mpfr_get_d and mpfr_set_d
+ and similar functions for binary32, decimal64 and binary128
+
+ added asinu and asinpi
+
+ [src/asinu.c] return NaN for u=0 and |x| > 1
+ [tests/tasinu.c] added more tests
+
+ [src/acosu.c] for u=0 and |x| > 1, return NaN
+ [tests/tacosu.c] added corresponding test
+
+2021-01-31 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests] Use RND_LOOP.
+ Changes with:
+ perl -pi -e 's/^( *)for *\((\w+) *= *0 *; *\2 *< *MPFR_RND_MAX *; *\2 *\+\+\) *$/\1RND_LOOP (\2)/' *.c
+
+ [tests] Added tacosu and tasinu to svn:ignore property.
+
+ [tests/mpfr-test.h] Added mpfr_cmp_si0 macro (check NaN).
+ [tests/tasinu.c] Replaced mpfr_cmp_ui / mpfr_cmp_si by the ...0 version.
+
+ [tests/tasinu.c] Replaced mpfr_cmp by !mpfr_equal_p.
+
+ [tests/tacosu.c] Replaced mpfr_cmp by !mpfr_equal_p.
+
+ [tests/tacosu.c] Fixed failing test with --with-mini-gmp
+ and -DMINI_GMP_LIMB_TYPE=int under Linux/x86_64.
+
+ [tools/mpfrlint] Detect the use of mpfr_set_emin / mpfr_set_emax
+ when set_emin / set_emax could be used (checking failures).
+
+ [tests/tdiv.c] Use set_emax rather than mpfr_set_emax with a test.
+
+ [tests/*.c] When not in a test, use set_emin and set_emax rather than
+ mpfr_set_emin and mpfr_set_emax, in order to check failures.
+ Done with: perl -pi -e 's/^ *\Kmpfr_(set_e(min|max) *\()/\1/' *.c
+
+ [tests/tests.c] Improved error message in set_emin / set_emax to
+ better support platforms where mpfr_exp_t > long int.
+
+ [tests/tcot.c] Use set_emin and set_emax rather than mpfr_set_emin and
+ mpfr_set_emax with a test (test done in set_emin / set_emax).
+
+ [src/{acosu.c,asinu.c,cosu.c,sinu.c,tanu.c}] Typos in comments.
+
+ [tests/tasinu.c] Use set_emin rather than mpfr_set_emin.
+
+2021-01-31 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/acosu.c] fixed case x=-1/2 which was wrong
+ [tests/tacosu.c] added test cases
+
+2021-01-30 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [tests/tacosu.c] reduced number of generic tests
+ [tests/tasinu.c] likewise
+
+ [src/asinu.c] fixed case x=-1 and underflow case
+ [tests/tasinu.c] added test for underflow
+
+2021-01-29 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ added asinu (work in progress, not yet usable)
+
+ [doc/mpfr.texi] improve description of mpfr_acosu
+
+ [src/acosu.c] fixed another typo
+
+ [src/acosu.c] fixed typo
+
+2021-01-29 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/acosu.c] Simplified code.
+
+ [tests/tgeneric.c] Added a cast for printf.
+
+ [tests/tgeneric.c] Corrected indentation.
+
+ [tests/tgeneric.c] Corrected indentation.
+
+2021-01-29 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ added cosu and cospi in the manual and NEWS
+
+ new function mpfr_acosu (still to be added in NEWS and mpfr.texi)
+
+2021-01-29 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/{cosu.c,sinu.c,tanu.c}] Function logging: added missing u.
+
+ [TODO] LIA-2 URL after redirection (i.e. https).
+
+2021-01-29 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [TODO] added pointer to LIA-2
+
+2021-01-26 Vincent Lefèvre <vincent at vinc17.net>
+
+ [INSTALL,doc/update-faq,tools/announce-text] With wget, use
+ the --no-config option as the user's .wgetrc file may significantly
+ change the behavior and possibly yield errors. See discussion at
+ <https://lists.debian.org/debian-user/2021/01/msg01021.html>.
+
+2021-01-20 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [TODO] update about powr, rootn and rsqrt
+
+ [TODO] update about reserved cr_xxx names from C standard
+
+2021-01-14 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/{cosu.c,sinu.c,tanu.c}] Range reduction: improved a test, renamed
+ a variable (e to p, as this is more like a precision), and updated
+ comments, making the code and comments similar for these 3 functions.
+
+ Added function logging for mpfr_fmod_ui and mpfr_sqrt_ui.
+
+2021-01-14 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/memory.c] Call "fflush (NULL)" before abort() in order to flush
+ all the output streams, in particular the log file (when there is one),
+ so that setting MPFR_LOG_FLUSH (which may be inefficient) is not needed
+ to debug tests that end with a memory error.
+
+ This fixes a regression with glibc 2.27+: the streams are no longer
+ flushed by abort(), as permitted by POSIX; see the abort(3) man page.
+
+2021-01-14 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src] Fixed typo in mpfr_printf format from MPFR_LOG_FUNC for several
+ functions.
+
+ [doc/mpfr.texi] Completed mpfr_fmod_ui description.
+
+ [src/cosu.c] Fixed bug when the reduced argument is 0.
+
+ [tests/tcosu.c] Added tests that give a reduced argument equal to 0.
+
+ [src/cosu.c] Fixed memory leak with very small reduced arguments.
+
+2021-01-14 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [tests/tcosu.c] increase nmax in test_generic call
+ [tests/tsinu.c] likewise
+ [tests/ttanu.c] likewise
+
+2021-01-13 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/{tcosu.c,tsinu.c,ttanu.c}] For the generic tests, no need
+ to reduce emax any longer, now that the fast range reduction has
+ been implemented.
+
+ [src/tanu.c] Implemented range reduction for mpfr_tanu.
+
+ [src/{cosu.c,sinu.c}] Corrected the position of a comment.
+
+ [src/cosu.c] Implemented range reduction for mpfr_cosu.
+
+2021-01-13 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/sinu.c] removed FIXME (done)
+
+2021-01-13 Vincent Lefèvre <vincent at vinc17.net>
+
+ [NEWS,doc/mpfr.texi] For the new trigonometric functions mpfr_cosu,
+ mpfr_sinu, mpfr_tanu, mpfr_cospi, mpfr_sinpi, mpfr_tanpi, removed the
+ "experimental" mention. In mpfr.texi, also added missing functions to
+ Section "Added Functions" (API Compatibility).
+
+ [doc/mpfr.texi] Style consistency: more "[unsigned] long int"
+ instead of just "[unsigned] long".
+
+ [doc/mpfr.texi] Style: use always "[unsigned] long int" in prototypes
+ rather than sometimes just "[unsigned] long".
+
+ [NEWS,doc/mpfr.texi] New function mpfr_fmod_ui.
+
+2021-01-13 Vincent Lefèvre <vincent at vinc17.net>
+
+ Implemented range reduction for mpfr_sinu (and defined mpfr_fmod_ui).
+
+ This is done by computing x mod u; and a new function mpfr_fmod_ui
+ has been defined for this purpose. As mpfr_fmod_ui could be useful
+ to the user, its declaration is put in src/mpfr.h, with the intent
+ to document this new function later.
+
+ In the src directory:
+ * Added fmod_ui.c file (mpfr_fmod_ui function) based on sqrt_ui.c
+ (hence the same copyright line).
+ * Makefile.am: added fmod_ui.c to libmpfr_la_SOURCES.
+ * mpfr.h: added mpfr_fmod_ui.
+ * sinu.c: implemented range reduction for mpfr_sinu.
+
+2021-01-13 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tsinu.c] Added tests where x/u is a "big" integer, so that
+ the reduced argument is 0 (exactly).
+
+ [tests/tsinu.c] Added a test on a large input such that x mod u may need
+ more precision than x. This will be important to test range reduction.
+
+ [src/sqrt_ui.c] Coding style.
+
+ [src/{cosu.c,sinu.c,tanu.c}] Changed MPFR_PREC to MPFR_GET_PREC.
+
+2021-01-12 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/{tcosu.c,tsinu.c,ttanu.c}] C90 compatibility for the tests with
+ large inputs (added in r14236). Also avoid the hardcoded size by using
+ the numberof() macro.
+
+2021-01-12 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [tests/tcosu.c] added hard-coded tests with large inputs
+ [tests/tsinu.c] likewise
+ [tests/ttanu.c] likewise
+
+2021-01-05 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/set_ld.c] added pointer to "double double" format
+
+2021-01-04 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc] Updated FAQ.html with update-faq.
+
2021-01-03 Vincent Lefèvre <vincent at vinc17.net>
[doc/mpfr.texi] Updated the month.
@@ -977,58 +3128,444 @@
" ".($1||"$2-").($2+1)/e' **/*(^/)
under zsh. Removed 2020 from the example in the doc/README.dev file.
-2020-09-28 Vincent Lefèvre <vincent at vinc17.net>
+ [src/mpfr-impl.h] Removed a now useless test on __clang__, corresponding
+ to a bug fixed in Clang 3.4 (see <https://bugs.debian.org/705583>).
- [src/set_z_exp.c] Fixed overflow/underflow detection in exponent ranges
- where emax < 0 or emin >= 0 (bug introduced in r14147).
- [tests/tset_z_exp.c] Added some tests in a reduced exponent range for
- the bug fixed here (and improved existing tests).
- Note: this bug was detected with mini-gmp (for which mpfr_set_z_2exp is
- used more often because a long does not fit into a limb).
- (merged changesets r14146-14150 of src/set_z_2exp.c and
- tests/tset_z_2exp.c from the trunk)
+2020-12-20 Vincent Lefèvre <vincent at vinc17.net>
+ Optimize mpfr_abs, mpfr_copysign and mpfr_setsign in the case of reused
+ argument, like what was already done for mpfr_neg: one can just set the
+ sign and handle NaN instead of calling mpfr_set4.
+ Completed tests/tcopysign.c to test with a reused argument.
+
+ [src/cosu.c] Avoid a possible integer overflow (triggered by the tests
+ with UBsan) from r14225.
+
+2020-12-18 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ fixed initial precision in sinu, cosu and tanu
+ also in cosu, treat special case when 2*pi*x/u is small
+
+2020-12-17 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tgeneric.c] Removed the use of __func__ as it is not supported
+ by ISO C90 (it was not really useful here, though).
+
+ [tests/tcosu.c] Increased the maximum precision for test_generic and
+ added a comment about this.
+
+ [tests] Added tcosu, tsinu and ttanu to svn:ignore property.
+
+ For the generic tests, output the number of normal cases and the total
+ if the MPFR_TGENERIC_STAT environment variable is defined.
+ Added description to the README.dev file.
+
+ [tests/tcosu.c] Increased the number of generic tests. This should make
+ the warning "Too few normal cases in generic tests" much less common.
+
+ [tests]
+ * Added data/tan2pi: hardest-to-round cases of tanu with u = 1
+ in double precision, interval [0,1/4].
+ * ttanu.c: test tan2pi values with u = 1.
+
+ [tests/ttanu.c] C89 compatibility.
+
+2020-12-16 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Removed spurious blank line; .texi source reformat.
+
+ [doc/mpfr.texi] Typography: "resp." must be followed by "@:".
+
+ [doc/check-typography] Also check "resp.".
+
+ [doc/mpfr.texi] Removed misplaced @tie{}.
+
+2020-12-16 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [doc/mpfr.texi] fixed another typo
+
+ [doc/mpfr.texi] fixed typos
+
+ added sinpi, cospi, tanpi
+
+ added new function mpfr_tanu
+
+ [src/sinu.c] improved comment
+
+2020-12-15 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/sinu.c] added reference
+
+ [src/sinu.c] fixed compiler warning
+ [src/cosu.c] deal with other exact cases
+ [tests/tcosu.c] added tests for other exact cases
+
+ [src/sinu.c] fixed bug in detection of pi/6 and friends
+
+2020-12-15 Vincent Lefèvre <vincent at vinc17.net>
+
+ [NEWS] mpfr_cosu and mpfr_sinu: improved item.
+
+2020-12-15 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [tests/tsinu.c] added more tests
+
+ [src/sinu.c] fixed case where 2xpi/u is +/-pi/6 mod pi
+ [tests/tsinu.c] added corresponding test case
+
+2020-12-15 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests]
+ * Added data/{cos2pi,sin2pi}: hardest-to-round cases of cosu and sinu
+ with u = 1 in double precision, interval [0,1/2].
+ * tcosu.c, tsinu.c: test cos2pi and sin2pi values with u = 1.
+
+ [tests/tests.c] test5rm(): mention test5rm in the error message.
+
+ [src/{cosu.c,sinu.c}] Added function logging.
+
+2020-12-15 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ added new function mpfr_cosu
+
+ [src/sinu.c] fixed typo in comment
+
+ [tests/tsinu.c] fixed typos in comments
+
+2020-12-15 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/sin_cos.c] Code improvement:
+ * replaced a MPFR_PREC(c) by m since the precision of c was set to m;
+ * as a consequence, the initial precision of xr in the Ziv loop will
+ always be m (whether expx >= 2 or not), so that one can use this
+ precision for the mpfr_init2.
+
+2020-12-15 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/sinu.c] forgot to count the rounding error in mpfr_sin (t, t, MPFR_RNDA)
+
+ [src/sinu.c] fixed issue with case t=0
+
+2020-12-15 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/{sin.c,sin_cos.c}]
+ * Do not initialize variables with the default precision, which
+ could have been set to a large value by the user; this would
+ be a waste of memory.
+ * In sin.c, do not initialize xr in the case where this variable
+ will not be used (in sin_cos.c, let's initialize it with the
+ minimum precision as it is used with different purposes).
+
+ [src/{ai.c,yn.c}] Do not initialize variables with the default
+ precision, which could have been set to a large value by the
+ user; this would be a waste of memory.
+
+ [tools/mpfrlint] Added a test to detect when mpfr_init or mpfr_inits is
+ used, i.e. when a variable is initialized with the default precision.
+ This should not be done as the default precision could have been set to
+ a large value by the user, so that this is a waste of memory.
+
+ [src/sinu.c] Correction: variables must not be initialized with the
+ default precision, which could have been set to a large value by the
+ user, and this would be a waste of memory.
+
+2020-12-14 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/sinu.c] Fixed 2 bugs:
+ * in case of underflow, the flags were not set;
+ * mpfr_odd_p(t) could be called with t = 0, which is unsupported.
+
+2020-12-14 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/sinu.c] fixed typo (thanks Jeffrey Sarnoff)
+
+2020-12-14 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/sinu.c] Added a FIXME: the range reduction should be done in this
+ function (that's the whole point of sinu compared to sin, besides a
+ smaller rounding error).
+
+ [tests/tsinu.c] Added a FIXME concerning the size of the exponent.
+
+ [doc/mpfr.texi] Typographic correction of math formulas.
+
+ [doc/mpfr.texi] mpfr_sinu: corrections and improvements.
+
+ [doc/mpfr.texi] Updated the month.
+
+2020-12-14 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [NEWS] added mpfr_sinu
+ [doc/mpfr.texi] improve documentation of mpfr_sinu, and say it is experimental
+
+ added mpfr_sinu (work in progress)
+
+2020-12-13 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/zeta.c] Minor correction of a comment.
+
+2020-12-02 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/mpfr.h] Added a comment about Intel's compiler ICC and the
+ unsupported returns_nonnull attribute.
+
+2020-11-15 Vincent Lefèvre <vincent at vinc17.net>
+
+ [TODO] Added an item to add "const" in prototypes in the manual.
+
+ [doc/mpfr.texi] mpfr_subnormalize: define EXP(x) and PREC(x).
+
+ [doc/mpfr.texi] More detailed beginning of "Nomenclature and Types",
+ which now specifies the convention for the significand and the exponent.
+
+ [doc/mpfr.texi] Updated the month.
+
+ [doc/mpfr.texi] Document the mpfr_srcptr type.
+
+2020-10-28 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/talloc-cache.c] Check that malloc() doesn't return a null pointer
+ (in order to avoid an error with GCC's -fanalyzer, dev version).
+
+2020-10-23 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/invert_limb.h] Added a comment about r14171.
+
+ [src/invert_limb.h] Fixed potential issues introduced in 14170.
+ * The code isn't valid with 16-bit int (allowed by ISO C). So,
+ make sure with MPFR_STAT_STATIC_ASSERT that unsigned int is
+ large enough for invert_limb_table2.
+ Note: since the code is under "#if GMP_NUMB_BITS == 64",
+ this is unlikely to affect any system in practice, as
+ GMP_NUMB_BITS == 32 (or 16, if supported) should be better
+ on such a system.
+ * Make sure that the "<< 11" shifts do not overflow.
+
+2020-10-23 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/invert_limb.h] patch from Alexei Sibidanov, which reduces memory usage,
+ without degrading performance
+
+2020-10-23 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/README.dev] Replaced WG14 N2405 reference by the new N2579.
+
+2020-10-21 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/mpfr-impl.h] Updated UBF comment about aliasing rules.
+
+ [src/mpfr-impl.h] Updated UBF comment about aliasing rules.
+
+ [src/mpfr-impl.h] Updated UBF comment about aliasing rules.
+
+2020-10-19 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Updated mpfr_rootn_ui description about "agree with
+ the rootn function", now that IEEE 754-2019 is there (needed as
+ rootn was underspecified in IEEE 754-2008, so that TS 18661-4
+ incorrectly specified the case rootn(-inf, n even); see WG14 N2309
+ from the C FP group for the correction).
+
+2020-10-09 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ fixed typo
+
+2020-10-08 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/README.dev] Added a note about _Float128 vs long double.
+
+ [src/mpfr-impl.h] Added a TODO for the numberof() macro: make it a
+ constant expression and possibly change its type "long" to "ptrdiff_t".
+
+ [doc/mpfr.texi] Minor changes in Section "Formatted Output Functions".
+
+ [NEWS] Update.
+
+ [doc/mpfr.texi] Section "API Compatibility", formatted output functions
+ (mpfr_printf, etc.): completed r14155.
+
+ [doc/mpfr.texi] Updated the month.
+
+ [src/vasprintf.c] Improved comment for READ_INT.
+
+2020-10-07 Vincent Lefèvre <vincent at vinc17.net>
+
+ Fixed the formatted output functions (mpfr_printf, etc.) in the case
+ the precision consists only of a period.
+ * doc/mpfr.texi: correction and clarifications (be closer to ISO C);
+ note the change in Section "API Compatibility".
+ * src/vasprintf.c: fixed the bug.
+ * tests/tsprintf.c: update.
+
+2020-10-07 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src] Consistency: in prototypes, changed
+ mpz_t to mpz_ptr (mpfr-impl.h, pool.c);
+ mpfr_random_deviate_t to mpfr_random_deviate_ptr (random_deviate.c).
+
+ Note: This completes the changes I had done in r14103 (2020-08-21) for
+ mpfr_t. This time, the issue was detected by a GCC 11 snapshot, thanks
+ to the -Warray-parameter option (included in -Wall), which was added
+ on 2020-09-19 in GCC commit 6450f07388f9fe575a489c9309c36012b17b88b0.
+
+2020-10-07 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/vasprintf.c] Updated a comment.
+
+ Added tests/gen-printf-dot-prec Perl script to generate a .c file
+ showing printf and mpfr_printf output with:
+ * a missing precision field;
+ * a precision field with just a period (".");
+ * a precision field with an explicit precision 0 (".0").
+
+2020-09-27 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tset_z_2exp.c] Fixed typo detected by GCC.
+
+ [src/set_z_2exp.c] Fixed overflow/underflow detection in exponent ranges
+ where emax < 0 or emin >= 0 (bug introduced in r14145).
+
+ [tests/tset_z_2exp.c] Added some tests in a reduced exponent range (and
+ improved existing tests).
+ Note: Due to an incorrect change in set_z_2exp.c r14145, various tests
+ are failing with mini-gmp (for which mpfr_set_z_2exp is used more often
+ because a long does not fit into a limb) in unusual exponent ranges. So
+ such tests were obviously missing in tset_z_2exp.c before this commit.
+
2020-09-25 Vincent Lefèvre <vincent at vinc17.net>
- [src/set_z_exp.c] Fixed possible integer overflows with huge mpz_t.
- Note: In practice, they may occur only with a 32-bit ABI. Moreover,
- with a usual compilation, they should have no effect, assuming the
- processor does signed addition and multiplication mod 2^32 (as usual).
- However, UBsan will detect the issue, and LTO might have unpredictable
- effects.
+ [src/set_z_2exp.c] Fix: avoid possible integer overflows.
- [tests/tset_z_exp.c] Added testcases, enabled only when the
- MPFR_CHECK_LARGEMEM environment variable is set.
+ [tests/tset_z_2exp.c] Test a result.
- (merged changesets r14136-14145 of src/set_z_2exp.c and
- tests/tset_z_2exp.c from the trunk)
+ [doc/README.dev] Added how to convert an unsigned integer to the
+ corresponding signed integer with the two's complement rule (i.e.
+ modular arithmetic) but in a portable way.
-2020-09-17 Vincent Lefèvre <vincent at vinc17.net>
+ [tests] Updated svn:ignore property due to the rename in r14125.
+2020-09-24 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tset_z_2exp.c] Added another test that fails with just
+ "-m32 -fsanitize=undefined -fno-sanitize-recover".
+ This corresponds to what is described in the FIXME in src/set_z_2exp.c
+ (about the modified tnrandom.c test yielding an integer overflow).
+
+ [tests/tset_z_2exp.c] Added a test that triggers an integer overflow
+ in set_z_2exp.c with MPFR_CHECK_LARGEMEM=1 when MPFR is compiled with
+ "-m32 -fsanitize=undefined -fno-sanitize-recover -D_MPFR_EXP_FORMAT=4"
+ in CFLAGS:
+ set_z_2exp.c:71:26: runtime error: signed integer overflow:
+ 134217726 * 32 cannot be represented in type 'long int'
+
+2020-09-23 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/exp2.c] Added support for -D_MPFR_EXP_FORMAT=4 in the 32-bit ABI,
+ i.e. 32-bit long, so that the MPFR compilation no longer fails due to
+ a static assertion in this file. Note: many tests fail (not texp2),
+ but at least this allows some testing of various functions.
+
+2020-09-23 Vincent Lefèvre <vincent at vinc17.net>
+
+ [INSTALL] Update concerning MinGW and the __USE_MINGW_ANSI_STDIO macro.
+
+ The change done in r13668 seems to be a bit wrong (at least unclear).
+ This was done after finding
+ https://fr.osdn.net/projects/mingw/lists/archive/users/2019-January/000199.html
+ saying that __USE_MINGW_ANSI_STDIO became deprecated, during a
+ discussion on the vsnprintf() behavior:
+ https://gmplib.org/list-archives/gmp-bugs/2020-January/004716.html
+
+ However, it seems that printf() conformity issues have completely been
+ resolved only recently, in version 8.
+ http://mingw-w64.org/doku.php says:
+ Version 8 has been released
+ v8.0.0: 2020-09-18
+ Notable changes:
+ [...]
+ * __USE_MINGW_ANSI_STDIO now automatically enabled in C99 and C11
+ mode when not using UCRT by Pali Rohár
+ [...]
+
+ Compiling
+ #include <stdio.h>
+ int main (void) { volatile double d = -1.25; printf ("%e\n", d); }
+ gives with mingw-w64 version 7: -1.250000e+000
+ and with mingw-w64 version 8: -1.250000e+00
+
+ So, when testing MPFR with mingw-w64 version 8 but with GMP still built
+ with mingw-w64 version 7 (and static libraries), one gets a failure in
+ tsprintf:
+ Error in mpfr_vsprintf (s, "%e", ...);
+ expected: "-1.250000e+00"
+ got: "-1.250000e+000"
+ because the expected result has changed (it comes from sprintf used in
+ the MPFR test, which is now ISO-compliant).
+
+2020-09-18 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/set_z_2exp.c] Added a FIXME: possible integer overflow, which
+ can be reproduced with a 32-bit ABI by defining MPFR_PREC_MAX as
+ ((mpfr_prec_t) ((((mpfr_uprec_t) -1) >> 1) - 63)) and in tnrandom.c,
+ using "test_special (MPFR_PREC_MAX);".
+
+2020-09-16 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Updated the month.
+
[doc/mini-gmp] Say that the build with mini-gmp may require ISO C99+
features (as "long long" is currently needed by src/get_ld.c in the
case GMP_NUMB_BITS == 8).
- (merged changeset r14131 from the trunk)
+ For consistency, changed "C89" to "C90" in comments of *.{c,h} files.
+
+ [doc/mpfr.texi] Changed C89 to C90, as when mentioning ISO, one must
+ say C90 (C89 is the ANSI version). The GCC manual uses "C90" rather
+ than "C89", so this is probably better anyway.
+
[src/get_ld.c] Bug fix with GMP_NUMB_BITS == 8 (thus mini-gmp) and
32-bit long (e.g. with -m32 on x86_64).
- (merged changeset r14127 from the trunk)
2020-09-15 Vincent Lefèvre <vincent at vinc17.net>
- [src/random_deviate.c] Fixed non-portable code.
- (merged changesets r14123-14124 from the trunk)
+ Renamed some .c files for consistency:
+ src/get_z_exp.c → src/get_z_2exp.c
+ src/set_z_exp.c → src/set_z_2exp.c
+ tests/tset_z_exp.c → tests/tset_z_2exp.c
+ and updated src/Makefile.am and tests/Makefile.am files.
+ [src/random_deviate.c] The latest change r14123 was actually incorrect:
+ the real issue was non-portable code (with an incorrect comment) to
+ convert an unsigned integer to a signed, negative integer. Incorrect
+ behavior could occur with some C implementations and/or when mpfr_exp_t
+ does not have the same size as long. So, fixed this portability issue,
+ and avoid an assertion failure in a very rare case.
+
+ [src/random_deviate.c] Corrected an assertion. → Test failures.
+
+ [tests/tests.c] Added a note about tests done in "src/init2.c".
+
+ [src/init2.c] Check that __MPFR_EXP_MAX == MPFR_EXP_MAX too.
+
+ [tests/tget_z.c] Updated comment to mention that mpfr_get_z_2exp is
+ tested by this file.
+
[src/mpfr-mini-gmp.c] Fixed bug in gmp_urandomb_ui when the parameter n
is equal to the width of unsigned long.
Note: This case occurs in function random_deviate_generate() from
src/random_deviate.c with a 32-bit ABI (thus 32-bit unsigned long)
since n = W, which is defined as 32.
- (merged changeset r14117 from the trunk)
+2020-09-14 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/mpfr-mini-gmp.c] Simplified gmp_randseed_ui (note: the code in
+ r14114 and r14115 was not the intended one due to the wrong variable
+ in srand).
+
+ [src/mpfr-mini-gmp.c] Corrected latest change for gmp_randseed_ui.
+
With mini-gmp, use the standard rand() and srand() functions instead of
the POSIX (thus less portable) lrand48() and srand48().
- (merged changesets r14114-14116 from the trunk)
2020-09-10 Vincent Lefèvre <vincent at vinc17.net>
@@ -1036,13 +3573,71 @@
Note: this includes URL updates.
Updated URLs.
- (merged changesets r14106-14110 from the trunk)
+ [src/sub1sp.c] Updated a URL (http → https).
+
+ [doc/README.dev] Updated URLs.
+
+ [configure.ac] Updated a URL (http → https).
+
+ [configure.ac] Updated a URL concerning the "Intel® C++ Compiler 9.0
+ for Linux Release Notes" (the URL was not archived).
+
Updated a freebsd.org URL (bug tracker).
- (merged changeset r14104 from the trunk)
+2020-08-21 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src,tests] Consistency: in prototypes, changed
+ const mpfr_t to mpfr_srcptr
+ mpfr_t to mpfr_ptr
+ (except for mpfr_t *), as this is equivalent (the array is converted
+ to a pointer) and the mpfr_srcptr/mpfr_ptr form is the usual one.
+
+2020-08-20 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/README.dev] Added a note about "string + integer" expressions.
+
+ [tests/tsprintf.c] Replaced another occurrence of the code triggering
+ the warning "adding 'int' to a string does not append to the string
+ [-Wstring-plus-int]" with Clang (at least with 3.5 and above).
+
+2020-08-20 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ fixed a compiler warning found by Clang 10.0.1 on armv8-a (Samsung S8
+ aarch64-unknown-linux-android):
+
+ tsprintf.c:1613:27: warning: adding 'int' to a string does not append to the string [-Wstring-plus-int]
+ strcat (buf, ",0" + (j % 3 != 0));
+ ~~~~~^~~~~~~~~~~~~~
+
+2020-08-20 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ fixed a compiler warning found by Clang 10.0.1 on armv8-a (Samsung S8
+ aarch64-unknown-linux-android):
+
+ ./tgeneric.c:208:40: warning: implicit conversion from 'mp_limb_t' (aka 'unsigned long') to 'double' changes value from 18446744073709551615 to 18446744073709551616 [-Wimplicit-int-float-conversion]
+ (double) randlimb () / MPFR_LIMB_MAX;
+ ~ ^~~~~~~~~~~~~
+ ../src/mpfr-impl.h:1277:28: note: expanded from macro 'MPFR_LIMB_MAX'
+ #define MPFR_LIMB_MAX ((mp_limb_t) -1)
+ ^~~~~~~~~~~~~~
+
+2020-08-09 Vincent Lefèvre <vincent at vinc17.net>
+
+ [doc/mpfr.texi] Updated the month.
+
+ [doc/mpfr.texi] In the paragraph about cases that are hard to round,
+ also mention potentially exact cases.
+
2020-07-20 Vincent Lefèvre <vincent at vinc17.net>
+ [doc/README.dev] Added a paragraph on the issue with GCC and
+ conversions between binary and decimal types.
+
+ [src/get_d128.c] Updated FIXME comment (after r14087).
+
+ [src/get_d128.c] Removed unused variable due to r14087.
+
[src/get_d128.c] For the special values, avoid double to _Decimal128
conversions, as for such conversions, GCC generates from 2 to 3 MB in
the shared library when the decimal encoding is BID, and there will be
@@ -1053,53 +3648,67 @@
as the _Decimal128 implementation should follow the IEEE 754 rules.
This commit should avoid a large part of the problem reported at:
https://gforge.inria.fr/tracker/?func=detail&atid=619&aid=21849&group_id=136
- (merged changesets r14087-14088 from the trunk)
- [tests] Various corrections for error messages in tests of long double
- (and double).
- * tests.c: Simplified the d_trace and ld_trace functions:
- we do not need a union (with its potentional padding) as
- there are no aliasing issues with unsigned char.
- * tget_ld_2exp.c: Corrected a function call in an error message.
- * tset_ld.c: Fixed mpfr_out_str usage in error messages
- (see the change in r12520).
- (merged changesets r14080-14083 from the trunk)
+2020-07-15 Vincent Lefèvre <vincent at vinc17.net>
+ [tests/tset_ld.c] Improved an error message.
+
+2020-07-13 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tests.c] Simplified the d_trace and ld_trace functions:
+ we do not need a union (with its potentional padding) as there
+ are no aliasing issues with unsigned char.
+
+ [tests/tset_ld.c] Fixed mpfr_out_str usage in error messages
+ (see the change in r12520).
+
+ [tests/tget_ld_2exp.c] Corrected a function call in an error message.
+
[examples/version.c] "Compiler:" line: detect TCC (__TINYC__ macro).
- (merged changeset r14079 from the trunk)
+ (merged r14078 from tests/tversion.c)
[tests/tversion.c] "Compiler:" line: detect TCC (__TINYC__ macro).
- (merged changeset r14078 from the trunk)
-2020-07-10 Vincent Lefèvre <vincent at vinc17.net>
+2020-07-12 Vincent Lefèvre <vincent at vinc17.net>
- [src/Makefile.am] Updated -version-info to 7:1:1 for MPFR 4.1.1.
+ [src/get_d128.c] Updated the FIXME.
- Updated version to 4.1.1-dev.
+ [src/get_d128.c] Added a FIXME to work around GCC bug 96173.
- ChangeLog update with "LC_ALL=en_US.UTF8 TZ=UTC0 svn log -rHEAD:0 -v".
+2020-07-10 Vincent Lefèvre <vincent at vinc17.net>
- Updated version to 4.1.0.
+ [src/jyn_asympt.c] Added an assertion.
- [doc/mpfr.texi] Updated the month.
-
- [src/jyn_asympt.c] Partly solved the slowness of jn(733333,733333).
- [tests/tjn.c] Added tests of jn(73333,73333) and jn(733333,733333),
- enabled only with MPFR_CHECK_EXPENSIVE.
[doc/README.dev] In the MPFR_CHECK_EXPENSIVE description, say that
--enable-assert=full should not be used (too expensive, not needed).
- (merged changesets r14053-14062 from the trunk)
+ [tests/tjn.c] Added a related comment for the expensive bug20200703
+ test (which may take more than 1 hour with --enable-assert=full).
-2020-07-01 Vincent Lefèvre <vincent at vinc17.net>
+ [tests/tjn.c] Corrected indentation.
- ChangeLog update with "LC_ALL=en_US.UTF8 TZ=UTC0 svn log -rHEAD:0 -v".
+2020-07-03 Paul Zimmermann <Paul.Zimmermann at inria.fr>
- Updated version to 4.1.0-rc2.
+ [tests/tjn.c] added another test
- [NEWS] Added an item saying that TLS can safely be (re-)enabled
- on Sparc.
- (merged changeset r14047 from the trunk)
+ [src/jyn_asympt.c] fixed previous commit
+ [src/jyn_asympt.c] partly solved the slowness of jn(733333,733333)
+
+2020-07-03 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/jyn_asympt.c] Replaced some MPFR_EXP by MPFR_GET_EXP.
+
+ [src/jyn_asympt.c] Added a log message.
+
+ [tests/tjn.c] Added testcase for bug reported by Alex Coplan:
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96044
+ mpfr_jn is very slow or doesn't terminate on (733333,733333).
+
+2020-07-01 Vincent Lefèvre <vincent at vinc17.net>
+
+ [NEWS] For MPFR 4.1.0, added an item saying that TLS can safely be
+ (re-)enabled on Sparc.
+
2020-06-29 Vincent Lefèvre <vincent at vinc17.net>
[tests/mpfr-test.h] Avoid a GCC bug on Sparc, at least when using TLS.
@@ -1108,103 +3717,120 @@
occurs when accessing __gmpfr_flags directly (and the public mpfr.h
header file does not provide any macro that accesses an internal
variable directly). So a workaround for the tests is the best solution.
- (merged changeset r14045 from the trunk)
2020-06-18 Vincent Lefèvre <vincent at vinc17.net>
- Updated version to 4.1.0-dev (due to changes since 4.1.0-rc1).
+ [NEWS] Update for the next release.
-2020-06-18 Vincent Lefèvre <vincent at vinc17.net>
+ [src/mpfr-longlong.h] Mention applied patch (in r14035).
- Merged r14021-14036 from the trunk:
+2020-06-17 Vincent Lefèvre <vincent at vinc17.net>
- r14021:
- [tests] Skip tabort_defalloc1 and tabort_defalloc2 under Valgrind, as
- Valgrind complains due to the large allocation size.
- * mpfr-test.h, tests.c: added tests_run_within_valgrind() function to
- guess whether the test runs within Valgrind.
- * tabort_defalloc1.c, tabort_defalloc2.c: skip the test (exit code 77)
- if this function returns true.
+ [src/mpfr-longlong.h] Applied patch on
+ https://gmplib.org/list-archives/gmp-bugs/2020-June/004807.html
+ to fix add_ssaaaa and sub_ddmmss on arm / aarch64 (after a
+ reverse-merge of r14032 and r13997), in order to resolve
+ https://sympa.inria.fr/sympa/arc/mpfr/2020-06/msg00017.html
+ https://sympa.inria.fr/sympa/arc/mpfr/2020-06/msg00059.html
- r14022-14023:
- [tests/tset_ld.c] In bug_20160907 (tests on subnormals, specific to
- x86 extended precision):
- * Replaced an assertion by a test with detailed output.
- * In case of incorrect result, detect whether Valgrind is used and
- one gets the result obtained with Valgrind due to
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=890215
- https://bugs.kde.org/show_bug.cgi?id=421262
- (long double behaves as double); in this case, output a message
- without an error since Valgrind is the only cause of the
- miscalculation.
- * Corrected a value in a test, which did not match the comment.
+ [tests/tcmp_ui.c] Added a comment about a failing test with tcc if
+ one adds tcc support for macros using __builtin_constant_p in mpfr.h
+ by testing __TINYC__.
+ Bug report against tcc: https://savannah.nongnu.org/bugs/?58606
- r14024-14027:
- [src/digamma.c]
- * Replaced some MPFR_EXP / mpfr_get_exp by MPFR_GET_EXP to check that
- the MPFR number has an exponent (i.e. it is not a special value).
- * Added an integer overflow check on a precision.
- * Fixed a bug: an exponent was read while the value could be zero.
+2020-06-16 Paul Zimmermann <Paul.Zimmermann at inria.fr>
- r14028:
- [tests/tdigamma.c] Increase the number of tests.
+ [src/mpfr-longlong.h] disable buggy sub_ddmmss for aarch64
- r14029,14031:
- [doc/mpfr.texi] Specify the range of b for mpfr_get_str_ndigits.
+2020-06-15 Vincent Lefèvre <vincent at vinc17.net>
- r14030:
+ [doc/mpfr.texi] Corrected and detailed the description of
+ mpfr_get_str_ndigits.
+
[src/get_str.c] Since the mpfr_get_str_ndigits function is in the
public API, use MPFR_ASSERTN instead of MPFR_ASSERTD on the condition
on the argument b in order to get an assertion failure (by default)
if this condition is not satisfied.
- r14032,14035-14036:
- [src/mpfr-longlong.h] Applied patch on
- https://gmplib.org/list-archives/gmp-bugs/2020-June/004807.html
- to fix add_ssaaaa and sub_ddmmss on arm / aarch64, in order to resolve
- https://sympa.inria.fr/sympa/arc/mpfr/2020-06/msg00017.html
- https://sympa.inria.fr/sympa/arc/mpfr/2020-06/msg00059.html
+2020-06-15 Paul Zimmermann <Paul.Zimmermann at inria.fr>
- r14034:
- [tests/tcmp_ui.c] Added a comment about a failing test with tcc if
- one adds tcc support for macros using __builtin_constant_p in mpfr.h
- by testing __TINYC__.
- Bug report against tcc: https://savannah.nongnu.org/bugs/?58606
+ [doc/mpfr.texi] specify the range of b for mpfr_get_str_ndigits
+2020-06-14 Vincent Lefèvre <vincent at vinc17.net>
+
+ [tests/tdigamma.c] Increase the number of tests.
+
+2020-06-14 Paul Zimmermann <Paul.Zimmermann at inria.fr>
+
+ [src/digamma.c] fixed bug found while testing mpfr-4.1.0-rc1
+
+2020-06-14 Vincent Lefèvre <vincent at vinc17.net>
+
+ [src/digamma.c] Added a FIXME.
+
+ [src/digamma.c] Replaced mpfr_get_exp by MPFR_GET_EXP.
+
+ [src/digamma.c]
+ * Replaced some MPFR_EXP by MPFR_GET_EXP to check that the MPFR number
+ has an exponent (i.e. it is not a special value).
+ → Assertion failure in tdigamma (on x86_64).
+ Note: this might be the cause of an unexpected loop (infinite loop?)
+ on a Debian 10.4 POWER9 machine:
+ https://sympa.inria.fr/sympa/arc/mpfr/2020-06/msg00025.html
+ * Added an integer overflow check on a precision.
+
2020-06-13 Vincent Lefèvre <vincent at vinc17.net>
+ [tests/tset_ld.c] In a test specific to x86 extended precision, in case
+ of incorrect result, detect whether Valgrind is used and one gets the
+ result obtained with Valgrind due to
+ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=890215
+ https://bugs.kde.org/show_bug.cgi?id=421262
+ (long double behaves as double); in this case, output a message without
+ an error since Valgrind is the only cause of the miscalculation.
+
+ [tests/tset_ld.c] bug_20160907 (tests on subnormals):
+ * Replaced an assertion by a test with detailed output.
+ * Corrected a value in a test, which did not match the comment.
+
+ [tests] Skip tabort_defalloc1 and tabort_defalloc2 under Valgrind, as
+ Valgrind complains due to the large allocation size.
+ * mpfr-test.h, tests.c: added tests_run_within_valgrind() function to
+ guess whether the test runs within Valgrind.
+ * tabort_defalloc1.c, tabort_defalloc2.c: skip the test (exit code 77)
+ if this function returns true.
+
+ [configure.ac] Improvements concerning the default CFLAGS with GCC.
+ * Add -Wc++-compat option to CFLAGS with GCC ≥ 4.1 not in C++ mode.
+ Changes based on Bruno Haible's patch suggested at
+ https://sympa.inria.fr/sympa/arc/mpfr/2020-06/msg00008.html
+ (with some autoconf related fixes).
+ * Output the $CFLAGS value that is eventually used.
+
[configure.ac] No longer add -Wc++-compat to CFLAGS when the compiler
is GCC not in C++ mode (reverting the change done in r13406) since this
option is not available before GCC 4.1:
https://sympa.inria.fr/sympa/arc/mpfr/2020-06/msg00008.html
- (merged changeset r14018 from the trunk)
-2020-06-13 Vincent Lefèvre <vincent at vinc17.net>
+ [doc/mpfr.texi] ACM TOMS article: use the preferred DOI URL.
- Merged the latest changes from the trunk:
-
- r14012:
[tests/tfpif.c] Updated comment about the bug detected on AIX.
- r14015:
- [doc/mpfr.texi] ACM TOMS article: use the preferred DOI URL.
-
-2020-06-13 Vincent Lefèvre <vincent at vinc17.net>
-
- Merged the latest changes from the trunk:
-
- r14008,14010:
[tools/announce-text] For release candidates, automatically adapt the
flow of the text.
- r14009:
[NEWS] Updated mpfr.org URLs (http → https).
+ [tools/announce-text] Better line lengths for release candidates.
+
2020-06-12 Vincent Lefèvre <vincent at vinc17.net>
- Merged the latest changes from the trunk:
+ [README] Added URL of the official GNU MPFR website and a note about the
+ future migration, since InriaForge will shut down in December 2020.
- r14003:
+ [tests/tests.c] Removed a useless "#include <errno.h>" (added in r5252,
+ useless since r5253).
+
[tests/tfpif.c] Fixed a bug (in the test) detected on AIX[*], where
an fclose failed due to a previous read failure. At the same time,
check that a read failure no longer occurs. Note: the read failure
@@ -1212,34 +3838,19 @@
to fail, i.e. we now check that it fails for a good reason.
[*] gcc119.fsffrance.org on the GCC Compile farm.
- r14004:
- [tests/tests.c] Removed a useless "#include <errno.h>" (added in r5252,
- useless since r5253).
-
- r14005:
- [README] Added URL of the official GNU MPFR website and a note about the
- future migration, since InriaForge will shut down in December 2020.
-
-2020-06-12 Vincent Lefèvre <vincent at vinc17.net>
-
- ChangeLog update with "LC_ALL=en_US.UTF8 TZ=UTC0 svn log -rHEAD:0 -v".
-
- Updated version to 4.1.0-rc1.
-
[tools/update-version] Improved a message.
- (merged changeset r13999 from the trunk)
[src/mpfr-longlong.h] Corrected a comment from GMP's longlong.h, which
makes codespell complain in particular.
- (merged changeset r13997 from the trunk)
[tools/mpfrlint] Improved the __GMP_DECLSPEC test:
* No longer exclude "src/mpfr.h".
* Avoid false positives in "src/mpfr.h" and "src/mpfr-longlong.h".
- (merged changeset r13995 from the trunk)
[doc/mpfr.texi] Updated the month.
+ Updated version to 4.2.0-dev.
+
ChangeLog update with "LC_ALL=en_US.UTF8 TZ=UTC0 svn log -rHEAD:0 -v".
2020-06-11 Vincent Lefèvre <vincent at vinc17.net>
Modified: trunk/Build/source/libs/mpfr/mpfr-src/INSTALL
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/INSTALL 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/INSTALL 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,4 +1,4 @@
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -30,6 +30,11 @@
0. You first need to install GMP. See <https://gmplib.org/>.
MPFR requires GMP version 5.0.0 or later.
+ You need a C compiler, preferably GCC, but any reasonable compiler should
+ work (C++ compilers should work too, under the condition that they do not
+ break type punning via union).
+ And you need the standard Unix "make" command, plus some other standard
+ Unix utility commands.
1. Extract the files from the archive.
@@ -37,17 +42,17 @@
not been done yet and if patches are available. You can check
on the release page:
- https://www.mpfr.org/mpfr-4.1.1/
+ https://www.mpfr.org/mpfr-4.2.0/
which may have additional information. The patches can be applied
with commands like:
- wget --no-config https://www.mpfr.org/mpfr-4.1.1/allpatches
+ wget --no-config https://www.mpfr.org/mpfr-4.2.0/allpatches
patch -N -Z -p1 < allpatches
or
- curl https://www.mpfr.org/mpfr-4.1.1/allpatches | patch -N -Z -p1
+ curl https://www.mpfr.org/mpfr-4.2.0/allpatches | patch -N -Z -p1
(Those instructions are for the GNU patch command, for example
/usr/bin/gpatch on Solaris.)
@@ -387,7 +392,7 @@
* the FAQ (either the FAQ.html file distributed with MPFR, or the
on-line version <https://www.mpfr.org/faq.html>, which may be more
up-to-date);
- * the MPFR web page for this version <https://www.mpfr.org/mpfr-4.1.1/>,
+ * the MPFR web page for this version <https://www.mpfr.org/mpfr-4.2.0/>,
which lists bugs found in this version and provides some patches.
If the "configure" fails, please check that the C compiler and its
@@ -593,13 +598,12 @@
a. Using MinGW
==============
-1 - We advise to use MinGW (http://www.mingw.org/ for 32-bit, and
- https://sourceforge.net/projects/mingw-w64/ for 32- and 64-bit),
- which is simpler and less demanding than Cygwin. Contrary to Cygwin,
- it also provides native Windows code.
+1 - We advise to use Mingw-w64 (https://www.mingw-w64.org/), which is
+ simpler and less demanding than Cygwin. Contrary to Cygwin, it also
+ provides native Windows code.
If you also use MSYS, you should use "make" for MSYS instead of
- the "make" utility from MinGW-W64 or from GCC, which causes the
+ the "make" utility from Mingw-w64 or from GCC, which causes the
following error:
libtool: warning: libobj name 'extract.Tpo -c -o extract.lo extract.lo'
@@ -618,16 +622,22 @@
3 - To avoid using the Microsoft runtime (which might not be conform to ISO C),
you can use the MinGW runtime package (which is an integral part of MinGW).
- With old MinGW versions, you can get an ISO-compliant printf()
- if you compile your application with either '-ansi', '-posix' or
- '-D__USE_MINGW_ANSI_STDIO'. But note that this latter option,
- which was useful in the past (see below) should no longer be used.
+ With MinGW version v8.0.0 and later, the formatted output functions
+ (printf, etc.) are ISO/POSIX-conforming by default; however, this is
+ no longer true if -std=c89 is used at build time. Conversely, with
+ earlier MinGW versions, it is possible to get conforming functions
+ with either '-ansi', '-posix' or '-D__USE_MINGW_ANSI_STDIO'. Note
+ that if there is a conformity mismatch between the options used for
+ the GMP build (from which the MPFR build gets the output) and those
+ used for the MPFR tests, the tsprintf test may fail with one of the
+ errors below. Be careful that a non-conforming output may yield a
+ buffer overflow.
The following applies to old MinGW versions, and may be discouraged
with recent MinGW versions.
In order to have the MPFR formatted output functions based on an
- ISO-compliant printf(), you need to compile GMP (not MPFR) with
+ ISO-conforming printf(), you need to compile GMP (not MPFR) with
CC="gcc -D__USE_MINGW_ANSI_STDIO" (since the standard printf modifiers
%e, %Ld and %td are passed to GMP).
@@ -704,16 +714,23 @@
d. Using the CompCert compiler
==============================
-[this was tested with CompCert 3.7 and MPFR revision 13851 on x86_64-linux]
+[Tested with CompCert 3.10 and MPFR master-11992-f75b0c388 on x86_64-linux]
-CompCert (http://compcert.inria.fr/) is a formally verified compiler.
+CompCert (https://compcert.org/) is a formally verified compiler.
To compile MPFR with CompCert:
-$ ./configure CC=ccomp CFLAGS="-fbitfields -flongdouble -fstruct-passing" --disable-shared
+$ ./configure --disable-shared CC=ccomp CFLAGS="-flongdouble -fstruct-passing"
You also need to unset LD_LIBRARY_PATH, and/or you might need to change
-wl="" into wl="-Wl," in the libtool file.
+wl="" into wl="-Wl," in the libtool file (after running configure).
All tests (make check) should pass (tget_set_d64, tget_set_d128 and
tset_float128 are skipped, since CompCert does not support _Decimal64,
_Decimal128 nor _Float128).
+
+e. Using the Intel OneApi compiler
+==================================
+
+When using the Intel OneApi compiler (icx), one should add -fp-model=strict
+to CFLAGS so that the conversion routines from/to native floating-point
+types (float, double, ...) work properly. Otherwise some tests will fail.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/Makefile.am
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/Makefile.am 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/Makefile.am 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,4 +1,8 @@
-# Copyright 2000-2022 Free Software Foundation, Inc.
+# Copyright 2000-2023 Free Software Foundation, Inc.
+# Contributed by the AriC and Caramba projects, INRIA.
+
+# This file is part of the GNU MPFR Library.
+
# This Makefile.am is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -44,11 +48,12 @@
examples/rndo-add.c examples/sample.c examples/threads.c \
examples/version.c
-# Note: Even though tarballs do not normally contain a .git directory,
-# we need to distribute version-ext.sh to avoid a failure in case a
-# tarball is tested from a Git directory (this script is executed by
-# tests/Makefile.am in case of a Git working tree), which happens with
-# "make distcheck", for instance.
+# Note: The version-ext.sh script is normally no longer needed because
+# the output_info code in tests/Makefile.am now executes this script
+# only if $(top_srcdir)/.git exists and is readable, but this should
+# not occur in a tarball (built based on EXTRA_DIST), unless someone
+# has modified it for some reason. But since this script is small, we
+# distribute it just in case it would be used.
EXTRA_DIST = PATCHES VERSION doc/README.dev doc/check-typography doc/mini-gmp \
tools/check_mparam.c tools/ck-clz_tab tools/ck-copyright-notice \
tools/ck-mparam tools/ck-news tools/ck-version-info tools/get_patches.sh \
Modified: trunk/Build/source/libs/mpfr/mpfr-src/NEWS
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/NEWS 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/NEWS 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,4 +1,4 @@
-Copyright 2000-2022 Free Software Foundation, Inc.
+Copyright 2000-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -20,10 +20,27 @@
##############################################################################
-Changes from version 4.1.0 to version 4.1.1:
-- Bug fixes (see <https://www.mpfr.org/mpfr-4.1.0/#fixed> and/or the
- ChangeLog file), in particular for macros implementing functions.
-- Improved manual formatting.
+Changes from versions 4.1.* to version 4.2.0:
+- The "fondue savoyarde" release.
+- Binary compatible with MPFR 4.0.* and 4.1.*, though some minor changes in
+ the behavior of the formatted output functions may be visible, regarded
+ as underspecified behavior or bug fixes (see below).
+- New functions mpfr_cosu, mpfr_sinu, mpfr_tanu, mpfr_acosu, mpfr_asinu,
+ mpfr_atanu and mpfr_atan2u.
+- New functions mpfr_cospi, mpfr_sinpi, mpfr_tanpi, mpfr_acospi, mpfr_asinpi,
+ mpfr_atanpi and mpfr_atan2pi.
+- New functions mpfr_log2p1, mpfr_log10p1, mpfr_exp2m1, mpfr_exp10m1 and
+ mpfr_compound_si.
+- New functions mpfr_fmod_ui, mpfr_powr, mpfr_pown, mpfr_pow_uj, mpfr_pow_sj
+ and mpfr_rootn_si (mpfr_pown is actually a macro defined as an alias for
+ mpfr_pow_sj).
+- Bug fixes.
+ In particular, for the formatted output functions (mpfr_printf, etc.),
+ the case where the precision consists only of a period has been fixed
+ to be like ".0" as specified in the ISO C standard, and the manual has
+ been corrected and clarified.
+ The macros of the custom interface have also been fixed: they now behave
+ like functions (except a minor limitation for mpfr_custom_init_set).
Changes from versions 4.0.* to version 4.1.0:
- The "épinards à la crème" release.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/README
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/README 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/README 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,4 +1,4 @@
-Copyright 2000-2022 Free Software Foundation, Inc.
+Copyright 2000-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -76,4 +76,4 @@
In this case, you should read the file "doc/README.dev" in the working tree
or online:
- https://gitlab.inria.fr/mpfr/mpfr/-/blob/4.1/doc/README.dev
+ https://gitlab.inria.fr/mpfr/mpfr/-/blob/4.2/doc/README.dev
Modified: trunk/Build/source/libs/mpfr/mpfr-src/TODO
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/TODO 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/TODO 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,4 +1,4 @@
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -27,6 +27,7 @@
6. Miscellaneous
7. Portability
+
##############################################################################
1. Documentation
##############################################################################
@@ -33,6 +34,14 @@
- add a description of the algorithms used and a proof of correctness
+- when mp*_srcptr is used in a prototype, add "const" in the prototype
+ in the manual, like what is now done in the GMP manual, i.e.
+ mpfr_srcptr -> const mpfr_t
+ mpz_srcptr -> const mpz_t
+ mpq_srcptr -> const mpq_t
+ mpf_srcptr -> const mpf_t
+
+
##############################################################################
2. Compiler/library detection
##############################################################################
@@ -40,6 +49,7 @@
- update ICC detection.
* Use only __INTEL_COMPILER instead of the obsolete macro __ICC?
+
##############################################################################
3. Changes in existing functions
##############################################################################
@@ -105,6 +115,10 @@
4. New functions to implement
##############################################################################
+- cr_xxx functions from https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf
+ (section 7.31.8, page 392):
+ rsqrt (differs from mpfr_rec_sqrt in -0: mpfr_rec_sqrt gives +Inf whereas
+ rsqrt gives -Inf)
- a function to compute the hash of a floating-point number
(suggested by Patrick Pelissier)
- implement new functions from the C++17 standard:
@@ -145,11 +159,15 @@
GammaD(x) = Gamma(x+1/2)
- new functions of IEEE 754-2008, and more generally functions of the
C binding draft TS 18661-4:
- http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1946.pdf
- Some propositions about rootn: mpfr_rootn_si, mpfr_rootn_sj, mpfr_rootn_z,
- and versions with an unsigned integer: mpfr_rootn_ui (now implemented, as
- similar to mpfr_root) and mpfr_rootn_uj.
+ https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1946.pdf
+ More rootn functions: mpfr_rootn_uj, mpfr_rootn_sj, mpfr_rootn_z.
+- reduction functions and augmented arithmetic functions from IEEE 754-2019.
+ Note: the interface for the augmented arithmetic functions will need to be
+ discussed (suggestion: for augmentedAddition and augmentedSubtraction,
+ where x+y-roundTiesTowardZero(x+y) may be inexact in MPFR, use a spec
+ similar to augmentedMultiplication).
- functions defined in the LIA-2 standard
+ <https://standards.iso.org/ittf/PubliclyAvailableStandards/c024427_ISO_IEC_10967-2_2001(E).zip>
+ minimum and maximum (5.2.2): max, min, max_seq, min_seq, mmax_seq
and mmin_seq (mpfr_min and mpfr_max correspond to mmin and mmax);
+ rounding_rest, floor_rest, ceiling_rest (5.2.4);
@@ -162,10 +180,7 @@
+ axis_rad (5.3.9.1) if useful in MPFR;
+ cycle (5.3.10.1): rad(2 pi x / u) u / (2 pi) = remr(x, u);
+ axis_cycle (5.3.10.1) if useful in MPFR;
- + sinu, cosu, tanu, cotu, secu, cscu, cossinu, arcsinu, arccosu,
- arctanu, arccotu, arcsecu, arccscu (5.3.10.{2..14}):
- sin(x 2 pi / u), etc.;
- [from which sinpi(x) = sin(Pi*x), ... are trivial to implement, with u=2.]
+ + cotu, secu, cscu, cossinu, arccotu, arcsecu, arccscu (5.3.10.{5..14}):
+ arcu (5.3.10.15): arctan2(y,x) u / (2 pi);
+ rad_to_cycle, cycle_to_rad, cycle_to_cycle (5.3.11.{1..3}).
- From GSL, missing special functions (if useful in MPFR):
@@ -250,9 +265,9 @@
- functions from ISO/IEC 24747:2009 (Extensions to the C Library,
to Support Mathematical Special Functions).
Standard: https://www.iso.org/standard/38857.html
- Draft: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1292.pdf
- Rationale: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1244.pdf
- See also: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3060.pdf
+ Draft: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1292.pdf
+ Rationale: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1244.pdf
+ See also: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3060.pdf
(similar, for C++).
Also check whether the functions that are already implemented in MPFR
match this standard.
@@ -285,8 +300,8 @@
Support UBF in mpfr_check_range or add mpfr_ubf_check_range?
Make this available in the API, e.g. for MPC.
-- mpfr_cmp_uj and mpfr_cmp_sj. They would be useful to test MPFR with
- _MPFR_EXP_FORMAT=4.
+- mpfr_cmp_uj, mpfr_cmp_sj, mpfr_mul_uj, mpfr_mul_sj. They would be useful
+ to test MPFR with _MPFR_EXP_FORMAT=4.
- base conversion with the round-trip property using a minimal precision,
such as the to_chars functions from the C++ standard:
@@ -304,6 +319,16 @@
Text from: https://www.zsh.org/mla/workers/2019/msg01138.html
+ Idea of implementation: The get_str.c code is based on mpn_get_str, so
+ that we would like to do something similar, but mpn_get_str doesn't give
+ any information about the error. So we should request additional digits
+ (a bit like what is done in get_str.c) and compute approximations to the
+ distance (as an mpz_t) between the input and the straddling midpoints,
+ the unit being the weight of the last requested digit. Then deduce the
+ closest string to the input with the fewest digits in the interval (data
+ are approximate, so that it may be impossible to answer, i.e. this needs
+ to be done in a Ziv loop).
+
- Serialization / Deserialization. Suggested by Frédéric Pétrot:
https://sympa.inria.fr/sympa/arc/mpfr/2020-02/msg00006.html
like mpfr_fpif_{import,export}, but with memory instead of file.
@@ -349,10 +374,24 @@
* Add new mpfr_fpif_export, mpfr_fpif_import, mpfr_fpif_export_mem,
mpfr_fpif_import_mem.
+- Fused divide-add and fused divide-subtract (mpfr_fda, mpfr_fds).
+ Reference: K. Pande, A. Parkhi, S. Jaykar and A. Peshattiwar,
+ "Design and Implementation of Floating Point Divide-Add Fused Architecture",
+ 2015 Fifth International Conference on Communication Systems and Network
+ Technologies, 2015, pp. 797-800, doi: 10.1109/CSNT.2015.179.
+ However, this article does not provide a specification of special values
+ (but the same rules as FMA/FMS could be chosen, based on 1/±0 = ±Inf and
+ 1/±Inf = ±0).
+
+
##############################################################################
5. Efficiency
##############################################################################
+- Fredrik Johansson wrote a new preprint about computing the gamma function,
+ where he claims a speedup of 10 over MPFR at machine precision, and a
+ speedup of 1000 for a first call to gamma at 10000 digits:
+ https://hal.inria.fr/hal-03346642
- Fredrik Johansson reports that mpfr_ai is slow for large arguments: an
asymptotic expansion should be used (once done, remove REDUCE_EMAX from
tests/tai.c and update the description in mpfr.texi).
@@ -486,7 +525,23 @@
In particular, binary package distributions would benefit from FMV as
only one binary is generated for different processor families.
+- use intrinsics such as _addcarry_u64 (Intel specific) and
+ __builtin_addcll (clang specific) when available
+ (needs a configure test).
+ References:
+ https://software.intel.com/sites/landingpage/IntrinsicsGuide/
+ https://clang.llvm.org/docs/LanguageExtensions.html#multiprecision-arithmetic-builtins
+ https://stackoverflow.com/q/11228855/3782797
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79173
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97387
+ https://stackoverflow.com/questions/71600474/difference-between-builtin-addcll-and-addcarry-u64
+ (would be useful for add1sp.c and sub1sp.c).
+- reduce the size of the MPFR library generated by GCC by avoiding
+ operations on _Decimal128 in get_d128.c when its encoding is BID
+ (i.e., software implementation). See FIXME in this file.
+
+
##############################################################################
6. Miscellaneous
##############################################################################
@@ -694,13 +749,21 @@
internal macros if possible, such as MPFR_TMP_INIT1, MPFR_TMP_INIT and
MPFR_ALIAS.
+- add some option to use pkg-config to get the compiler flags associated
+ with GMP ("pkg-config --cflags gmp" / "pkg-config --libs gmp"). It
+ could be one of
+ --with-pkg-config[=<PATH>]
+ --with-pkg-config-path[=<PATH>]
+ See also the autoconf macros.
+ The non-standard CPATH and C_INCLUDE_PATH environment variables need to
+ be unset (only when invoking pkg-config) as a workaround to
+ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=984504
+
##############################################################################
7. Portability
##############################################################################
-- add a web page with results of builds on different architectures
-
- [Kevin about texp.c long strings]
For strings longer than c99 guarantees, it might be cleaner to
introduce a "tests_strdupcat" or something to concatenate literal
@@ -723,3 +786,8 @@
* have a rule that copies the needed files ("mpfr.h" or they should
be prefixed with "mpfr-") to $(top_builddir)/include;
* use "-I$(top_builddir)/include".
+
+- _Noreturn (from ISO C11) may be replaced by [[noreturn]] in the future:
+ https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2764.pdf
+ Once this is implemented in compilers, consider it as an alternative
+ (concerned files: acinclude.m4, doc/README.dev and src/mpfr-impl.h).
Modified: trunk/Build/source/libs/mpfr/mpfr-src/VERSION
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/VERSION 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/VERSION 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1 +1 @@
-4.1.1
+4.2.0
Modified: trunk/Build/source/libs/mpfr/mpfr-src/acinclude.m4
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/acinclude.m4 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/acinclude.m4 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
dnl MPFR specific autoconf macros
-dnl Copyright 2000, 2002-2022 Free Software Foundation, Inc.
+dnl Copyright 2000, 2002-2023 Free Software Foundation, Inc.
dnl Contributed by the AriC and Caramba projects, INRIA.
dnl
dnl This file is part of the GNU MPFR Library.
@@ -302,22 +302,23 @@
fi
dnl Check if subnormal numbers are supported.
-dnl for the binary64 format, the smallest normal number is 2^(-1022)
-dnl for the binary32 format, the smallest normal number is 2^(-126)
-dnl Note: One could double-check with the value of the macros
-dnl DBL_HAS_SUBNORM and FLT_HAS_SUBNORM, when defined (C2x), but
-dnl neither tests would be reliable on implementations with partial
-dnl subnormal support. Anyway, this check is useful only for the
-dnl tests. Thus in doubt, assume that subnormals are not supported,
-dnl in order to disable the corresponding tests (which could fail).
+dnl For the binary64 format, the smallest normal number is 2^(-1022).
+dnl For the binary32 format, the smallest normal number is 2^(-126).
+dnl Do not use the corresponding HAVE_SUBNORM_* macros as they
+dnl are not available when cross-compiling. For the tests, use
+dnl the have_subnorm_* functions if need be.
+dnl Note: "volatile" is needed to avoid -ffast-math optimizations
+dnl (default in icx 2021.2.0, which also sets the FZ and DAZ bits
+dnl of the x86-64 MXCSR register to disregard subnormals).
AC_CACHE_CHECK([for subnormal double-precision numbers],
mpfr_cv_have_subnorm_dbl, [
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdio.h>
int main (void) {
- double x = 2.22507385850720138309e-308;
- fprintf (stderr, "%e\n", x / 2.0);
- return 2.0 * (double) (x / 2.0) != x;
+ volatile double x = 2.22507385850720138309e-308, y;
+ y = x / 2.0;
+ fprintf (stderr, "%e\n", y);
+ return 2.0 * y != x;
}
]])],
[mpfr_cv_have_subnorm_dbl="yes"],
@@ -333,9 +334,10 @@
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdio.h>
int main (void) {
- float x = 1.17549435082229e-38;
- fprintf (stderr, "%e\n", x / 2.0);
- return 2.0 * (float) (x / 2.0) != x;
+ volatile float x = 1.17549435082229e-38, y;
+ y = x / 2.0f;
+ fprintf (stderr, "%e\n", (double) y);
+ return 2.0f * y != x;
}
]])],
[mpfr_cv_have_subnorm_flt="yes"],
@@ -392,6 +394,12 @@
dnl Check whether NAN != NAN (as required by the IEEE-754 standard,
dnl but not by the ISO C standard). For instance, this is false with
dnl MIPSpro 7.3.1.3m under IRIX64. By default, assume this is true.
+dnl Note that this test may not detect all issues. For instance, with
+dnl icx 2021.2.0 (and default fast-math), the result depends on whether
+dnl the identifier has internal or external linkage:
+dnl https://community.intel.com/t5/Intel-oneAPI-Base-Toolkit/icx-2021-2-0-bug-incorrect-NaN-comparison-using-an-identifier/m-p/1286869
+dnl TODO: change "NAN == NAN" to "NaN is supported" and rename
+dnl the MPFR_NANISNAN macro?
AC_CACHE_CHECK([if NAN == NAN], mpfr_cv_nanisnan, [
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdio.h>
@@ -507,27 +515,6 @@
AC_DEFINE(HAVE_NEARBYINT, 1,[Have ISO C99 nearbyint function])
],[AC_MSG_RESULT(no)])
-dnl Check if _mulx_u64 is provided
-dnl Note: This intrinsic is not standard. We need a run because
-dnl it may be provided but not working as expected (with ICC 15,
-dnl one gets an "Illegal instruction").
-AC_MSG_CHECKING([for _mulx_u64])
-AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-#include <immintrin.h>
-]], [[
- unsigned long long h1, h2;
- _mulx_u64(17, 42, &h1);
- _mulx_u64(-1, -1, &h2);
- return h1 == 0 && h2 == -2 ? 0 : 1;
-]])],
- [AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_MULX_U64, 1,[Have a working _mulx_u64 function])
- ],
- [AC_MSG_RESULT(no)
- ],
- [AC_MSG_RESULT([cannot test, assume no])
- ])
-
LIBS="$saved_LIBS"
dnl Try to determine the format of double
Modified: trunk/Build/source/libs/mpfr/mpfr-src/configure.ac
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/configure.ac 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/configure.ac 2023-01-12 04:40:09 UTC (rev 65526)
@@ -4,7 +4,7 @@
dnl be indented!
AC_COPYRIGHT([
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -26,7 +26,7 @@
])
dnl Add check-news when it checks for more than 15 lines
-AC_INIT([MPFR],[4.1.1])
+AC_INIT([MPFR],[4.2.0])
dnl AC_CANONICAL_HOST is needed by this configure.ac file.
dnl AC_CANONICAL_TARGET is not explicitly needed, but may be required by
@@ -430,6 +430,15 @@
dnl AM_PROG_AR is needed so that ar-lib (wrapper for Microsoft lib.exe)
dnl gets installed by "automake -i" (if absent, "automake --warnings=all"
dnl gives a warning).
+dnl However, if GMP chooses a non-default mode (a.k.a. ABI), this test may
+dnl fail. The reason is that GMP provides GMP_CC and GMP_CFLAGS to get the
+dnl right commands to compile (and link?) in the chosen non-default mode,
+dnl but does not provide a macro for the archiver (if such a special command
+dnl is needed). In case of failure, the user needs to either force GMP to
+dnl use the default mode or provide an AR variable for MPFR's configure.
+dnl Example: on power-aix, "gcc -c -O2 -maix64 -mpowerpc64 -mtune=power7"
+dnl is used, but "ar cru" fails. Solution: use AR="ar -X64" NM="nm -B -X64"
+dnl as said in the INSTALL file ("Notes on AIX/PowerPC").
AM_PROG_AR
dnl This must done before MPFR_CONFIGS.
@@ -473,8 +482,6 @@
dnl might yield a compilation failure if the -Werror option appears in
dnl __GMP_CFLAGS. But in this case, since -Werror is not used by default,
dnl one may expect that the user would also set CFLAGS for MPFR.
-dnl Note: When the compiler is GCC not in C++ mode, -Wc++-compat may be
-dnl interesting, but it has been introduced in GCC 4.1 only.
if test "$test_CFLAGS" != set && test -n "$GCC"; then
CFLAGS="-Wpointer-arith $CFLAGS"
AC_MSG_CHECKING(whether the selected language is C++)
@@ -485,12 +492,20 @@
#endif
]], [[]])],[
AC_MSG_RESULT(no)
+ dnl The option -Wc++-compat is available in GCC 4.1.0 and newer.
+ [
+ case `$CC --version | $SED -e 's/^[^ ]* //' -e 's/([^)]*) //' -e 1q` in
+ 2.*|3.*|4.0*) ;;
+ *) CFLAGS="-Wc++-compat $CFLAGS" ;;
+ esac
CFLAGS="-Wmissing-prototypes $CFLAGS"
+ ]
],[
AC_MSG_RESULT(yes)
CFLAGS="-Wmissing-declarations -Wno-sign-compare $CFLAGS"
])
CFLAGS="-Wall $CFLAGS"
+ AC_MSG_NOTICE([using CFLAGS="$CFLAGS"])
fi
AM_PROG_CC_C_O
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/Makefile.am
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/Makefile.am 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/Makefile.am 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,4 +1,8 @@
-# Copyright 2000-2022 Free Software Foundation, Inc.
+# Copyright 2000-2023 Free Software Foundation, Inc.
+# Contributed by the AriC and Caramba projects, INRIA.
+
+# This file is part of the GNU MPFR Library.
+
# This Makefile.am is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -16,12 +20,12 @@
# other "make" implementations.
.POSIX:
-EXTRA_DIST = round_raw_generic.c jyn_asympt.c \
- add1sp1_extracted.c mul_1_extracted.c sub1sp1_extracted.c \
- amd/mparam.h arm/mparam.h \
- generic/coverage/mparam.h generic/mparam.h \
- mips/mparam.h powerpc64/mparam.h sparc64/mparam.h \
- x86/mparam.h x86_64/core2/mparam.h x86_64/mparam.h
+EXTRA_DIST = round_raw_generic.c jyn_asympt.c \
+ add1sp1_extracted.c mul_1_extracted.c sub1sp1_extracted.c \
+ amd/mparam.h arm/mparam.h \
+ generic/coverage/mparam.h generic/mparam.h \
+ mips/mparam.h powerpc64/mparam.h sparc64/mparam.h \
+ x86/mparam.h x86_64/core2/mparam.h x86_64/mparam.h
include_HEADERS = mpfr.h mpf2mpfr.h
nodist_include_HEADERS =
@@ -31,44 +35,46 @@
lib_LTLIBRARIES = libmpfr.la
libmpfr_la_SOURCES = mpfr.h mpf2mpfr.h mpfr-cvers.h mpfr-gmp.h \
-mpfr-impl.h mpfr-intmax.h mpfr-longlong.h mpfr-sassert.h mpfr-thread.h \
-exceptions.c extract.c uceil_exp2.c \
-uceil_log2.c ufloor_log2.c add.c add1.c add_ui.c agm.c clear.c cmp.c \
-cmpabs.c cmp_si.c cmp_ui.c comparisons.c div_2exp.c div_2si.c \
-div_2ui.c div.c div_ui.c dot.c dump.c eq.c exp10.c exp2.c exp3.c exp.c \
-frac.c frexp.c get_d.c get_exp.c get_str.c init.c inp_str.c isinteger.c \
-isinf.c isnan.c isnum.c const_log2.c log.c modf.c mul_2exp.c mul_2si.c \
-mul_2ui.c mul.c mul_ui.c neg.c next.c out_str.c printf.c vasprintf.c \
-const_pi.c pow.c pow_si.c pow_ui.c print_raw.c print_rnd_mode.c \
-reldiff.c round_prec.c set.c setmax.c setmin.c set_d.c set_dfl_prec.c \
-set_exp.c set_rnd.c set_f.c set_prc_raw.c set_prec.c set_q.c set_si.c \
-set_str.c set_str_raw.c set_ui.c set_z.c sqrt.c sqrt_ui.c sub.c sub1.c \
-sub_ui.c rint.c ui_div.c ui_sub.c urandom.c urandomb.c get_z_exp.c \
-swap.c factorial.c cosh.c sinh.c tanh.c sinh_cosh.c acosh.c asinh.c \
-atanh.c atan.c cmp2.c exp_2.c asin.c const_euler.c cos.c sin.c tan.c \
-fma.c fms.c hypot.c log1p.c expm1.c log2.c log10.c ui_pow.c \
-ui_pow_ui.c minmax.c dim.c signbit.c copysign.c setsign.c gmp_op.c \
-init2.c acos.c sin_cos.c set_nan.c set_inf.c set_zero.c powerof2.c \
-gamma.c set_ld.c get_ld.c cbrt.c volatile.c fits_s.h fits_sshort.c \
-fits_sint.c fits_slong.c fits_u.h fits_ushort.c fits_uint.c \
-fits_ulong.c fits_uintmax.c fits_intmax.c get_si.c get_ui.c zeta.c \
-cmp_d.c erf.c inits.c inits2.c clears.c sgn.c check.c sub1sp.c \
-version.c mpn_exp.c mpfr-gmp.c mp_clz_tab.c sum.c add1sp.c \
-free_cache.c si_op.c cmp_ld.c set_ui_2exp.c set_si_2exp.c set_uj.c \
-set_sj.c get_sj.c get_uj.c get_z.c iszero.c cache.c sqr.c \
-int_ceil_log2.c isqrt.c strtofr.c pow_z.c logging.c mulders.c get_f.c \
-round_p.c erfc.c atan2.c subnormal.c const_catalan.c root.c \
-gen_inverse.h sec.c csc.c cot.c eint.c sech.c csch.c coth.c \
-round_near_x.c constant.c abort_prec_max.c stack_interface.c lngamma.c \
-zeta_ui.c set_d64.c get_d64.c jn.c yn.c rem1.c add_d.c \
-sub_d.c d_sub.c mul_d.c div_d.c d_div.c li2.c rec_sqrt.c min_prec.c \
-buildopt.c digamma.c bernoulli.c isregular.c set_flt.c get_flt.c \
-scale2.c set_z_exp.c ai.c gammaonethird.c ieee_floats.h \
+mpfr-impl.h mpfr-intmax.h mpfr-longlong.h mpfr-sassert.h mpfr-thread.h \
+exceptions.c extract.c uceil_exp2.c \
+uceil_log2.c ufloor_log2.c add.c add1.c add_ui.c agm.c clear.c cmp.c \
+cmpabs.c cmp_si.c cmp_ui.c comparisons.c div_2exp.c div_2si.c \
+div_2ui.c div.c div_ui.c dot.c dump.c eq.c exp10.c exp2.c exp3.c exp.c \
+frac.c frexp.c get_d.c get_exp.c get_str.c init.c inp_str.c isinteger.c \
+isinf.c isnan.c isnum.c const_log2.c log.c modf.c mul_2exp.c mul_2si.c \
+mul_2ui.c mul.c mul_ui.c neg.c next.c out_str.c printf.c vasprintf.c \
+const_pi.c pow.c pow_si.c pow_ui.c pow_sj.c pow_uj.c print_raw.c \
+print_rnd_mode.c \
+reldiff.c round_prec.c set.c setmax.c setmin.c set_d.c set_dfl_prec.c \
+set_exp.c set_rnd.c set_f.c set_prc_raw.c set_prec.c set_q.c set_si.c \
+set_str.c set_str_raw.c set_ui.c set_z.c sqrt.c sqrt_ui.c sub.c sub1.c \
+sub_ui.c rint.c ui_div.c ui_sub.c urandom.c urandomb.c get_z_2exp.c \
+swap.c factorial.c cosh.c sinh.c tanh.c sinh_cosh.c acosh.c asinh.c \
+atanh.c atan.c cmp2.c exp_2.c asin.c const_euler.c cos.c sin.c tan.c \
+fma.c fms.c hypot.c log1p.c expm1.c log2.c log2p1.c log10.c log10p1.c \
+ui_pow.c ui_pow_ui.c minmax.c dim.c signbit.c copysign.c setsign.c \
+gmp_op.c init2.c acos.c sin_cos.c set_nan.c set_inf.c set_zero.c \
+powerof2.c gamma.c set_ld.c get_ld.c cbrt.c volatile.c fits_s.h \
+fits_sshort.c fits_sint.c fits_slong.c fits_u.h fits_ushort.c \
+fits_uint.c fits_ulong.c fits_uintmax.c fits_intmax.c get_si.c get_ui.c \
+zeta.c cmp_d.c erf.c inits.c inits2.c clears.c sgn.c check.c sub1sp.c \
+version.c mpn_exp.c mpfr-gmp.c mp_clz_tab.c sum.c add1sp.c \
+free_cache.c si_op.c cmp_ld.c set_ui_2exp.c set_si_2exp.c set_uj.c \
+set_sj.c get_sj.c get_uj.c get_z.c iszero.c cache.c sqr.c \
+int_ceil_log2.c isqrt.c strtofr.c pow_z.c logging.c mulders.c get_f.c \
+round_p.c erfc.c atan2.c atan2u.c subnormal.c const_catalan.c root.c \
+gen_inverse.h sec.c csc.c cot.c eint.c sech.c csch.c coth.c \
+round_near_x.c constant.c abort_prec_max.c stack_interface.c lngamma.c \
+zeta_ui.c set_d64.c get_d64.c jn.c yn.c rem1.c add_d.c \
+sub_d.c d_sub.c mul_d.c div_d.c d_div.c li2.c rec_sqrt.c min_prec.c \
+buildopt.c digamma.c bernoulli.c isregular.c set_flt.c get_flt.c \
+scale2.c set_z_2exp.c ai.c gammaonethird.c ieee_floats.h \
grandom.c fpif.c set_float128.c get_float128.c rndna.c nrandom.c \
random_deviate.h random_deviate.c erandom.c mpfr-mini-gmp.c \
-mpfr-mini-gmp.h fmma.c log_ui.c gamma_inc.c ubf.c invert_limb.h \
+mpfr-mini-gmp.h fmma.c log_ui.c gamma_inc.c ubf.c invert_limb.h \
invsqrt_limb.h beta.c odd_p.c get_q.c pool.c total_order.c set_d128.c \
-get_d128.c nbits_ulong.c cmpabs_ui.c
+get_d128.c nbits_ulong.c cmpabs_ui.c sinu.c cosu.c tanu.c fmod_ui.c \
+acosu.c asinu.c atanu.c compound.c exp2m1.c exp10m1.c powr.c
nodist_libmpfr_la_SOURCES = $(BUILT_SOURCES)
@@ -96,7 +102,8 @@
# 3.1.x 5:x:1
# 4.0.x 6:x:0
# 4.1.x 7:x:1
-libmpfr_la_LDFLAGS = $(MPFR_LDFLAGS) $(LIBMPFR_LDFLAGS) -version-info 7:1:1
+# 4.2.x 8:x:2
+libmpfr_la_LDFLAGS = $(MPFR_LDFLAGS) $(LIBMPFR_LDFLAGS) -version-info 8:0:2
GET_PATCHES_SH = $(top_srcdir)/tools/get_patches.sh
PATCHES = $(top_srcdir)/PATCHES
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/abort_prec_max.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/abort_prec_max.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/abort_prec_max.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_abort_prec_max -- Abort due to maximal precision overflow.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/acos.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/acos.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/acos.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_acos -- arc-cosinus of a floating-point number
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/acosh.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/acosh.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/acosh.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_acosh -- inverse hyperbolic cosine
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/acosu.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/acosu.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/acosu.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,169 @@
+/* mpfr_acosu -- acosu(x) = acos(x)*u/(2*pi)
+ mpfr_acospi -- acospi(x) = acos(x)/pi
+
+Copyright 2021-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#include "mpfr-impl.h"
+
+/* put in y the correctly rounded value of acos(x)*u/(2*pi) */
+int
+mpfr_acosu (mpfr_ptr y, mpfr_srcptr x, unsigned long u, mpfr_rnd_t rnd_mode)
+{
+ mpfr_t tmp, pi;
+ mpfr_prec_t prec;
+ mpfr_exp_t expx;
+ int compared, inexact;
+ MPFR_SAVE_EXPO_DECL (expo);
+ MPFR_ZIV_DECL (loop);
+
+ MPFR_LOG_FUNC
+ (("x[%Pu]=%.*Rg u=%lu rnd=%d", mpfr_get_prec(x), mpfr_log_prec, x, u,
+ rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ inexact));
+
+ /* Singular cases */
+ if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
+ {
+ if (MPFR_IS_NAN (x) || MPFR_IS_INF (x))
+ {
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+ else /* necessarily x=0 */
+ {
+ MPFR_ASSERTD(MPFR_IS_ZERO(x));
+ /* acos(0)=Pi/2 thus acosu(0)=u/4 */
+ return mpfr_set_ui_2exp (y, u, -2, rnd_mode);
+ }
+ }
+
+ compared = mpfr_cmpabs_ui (x, 1);
+ if (compared > 0)
+ {
+ /* acosu(x) = NaN for |x| > 1, included for u=0, since NaN*0 = NaN */
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+
+ if (u == 0) /* return +0 since acos(x)>=0 */
+ {
+ MPFR_SET_ZERO (y);
+ MPFR_SET_POS (y);
+ MPFR_RET (0);
+ }
+
+ if (compared == 0)
+ {
+ /* |x| = 1: acosu(1,u) = +0, acosu(-1,u)=u/2 */
+ if (MPFR_SIGN(x) > 0) /* IEEE-754 2019: acosPi(1) = +0 */
+ return mpfr_set_ui (y, 0, rnd_mode);
+ else
+ return mpfr_set_ui_2exp (y, u, -1, rnd_mode);
+ }
+
+ /* acos(1/2) = pi/6 and acos(-1/2) = pi/3, thus in these cases acos(x,u)
+ is exact when u is a multiple of 3 */
+ if (mpfr_cmp_si_2exp (x, MPFR_SIGN(x), -1) == 0 && (u % 3) == 0)
+ return mpfr_set_si_2exp (y, u / 3, MPFR_IS_NEG (x) ? 0 : -1, rnd_mode);
+
+ prec = MPFR_PREC (y);
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ /* For |x|<0.5, we have acos(x) = pi/2 - x*r(x) with |r(x)| < 1.05
+ thus acosu(x,u) = u/4*(1 - x*s(x)) with 0 <= s(x) < 1.
+ If EXP(x) <= -prec-3, then |u/4*x*s(x)| < u/4*2^(-prec-3) < ulp(u/4)/8
+ <= ulp(RN(u/4))/4, thus the result will be u/4, nextbelow(u/4) or
+ nextabove(u/4).
+ Warning: when u/4 is a power of two, the difference between u/4 and
+ nextbelow(u/4) is only 1/4*ulp(u/4).
+ We also require x < 2^-64, so that in the case u/4 is not exact,
+ the contribution of x*s(x) is smaller compared to the last bit of u. */
+ expx = MPFR_GET_EXP(x);
+ if (expx <= -64 && expx <= - (mpfr_exp_t) prec - 3)
+ {
+ prec = (MPFR_PREC(y) <= 63) ? 65 : MPFR_PREC(y) + 2;
+ /* now prec > 64 and prec > MPFR_PREC(y)+1 */
+ mpfr_init2 (tmp, prec);
+ inexact = mpfr_set_ui (tmp, u, MPFR_RNDN); /* exact since prec >= 64 */
+ MPFR_ASSERTD(inexact == 0);
+ /* for x>0, we have acos(x) < pi/2; for x<0, we have acos(x) > pi/2 */
+ if (MPFR_IS_POS(x))
+ mpfr_nextbelow (tmp);
+ else
+ mpfr_nextabove (tmp);
+ /* Since prec >= 65, the last significant bit of tmp is 1, and since
+ prec > PREC(y), tmp is not representable in the target precision,
+ which ensures we will get a correct ternary value below. */
+ MPFR_ASSERTD(mpfr_min_prec(tmp) > MPFR_PREC(y));
+ /* since prec >= PREC(y)+2, the rounding of tmp is correct */
+ inexact = mpfr_div_2ui (y, tmp, 2, rnd_mode);
+ mpfr_clear (tmp);
+ goto end;
+ }
+
+ prec += MPFR_INT_CEIL_LOG2(prec) + 10;
+
+ mpfr_init2 (tmp, prec);
+ mpfr_init2 (pi, prec);
+
+ MPFR_ZIV_INIT (loop, prec);
+ for (;;)
+ {
+ /* In the error analysis below, each thetax denotes a variable such that
+ |thetax| <= 2^-prec */
+ mpfr_acos (tmp, x, MPFR_RNDN);
+ /* tmp = acos(x) * (1 + theta1) */
+ mpfr_const_pi (pi, MPFR_RNDN);
+ /* pi = Pi * (1 + theta2) */
+ mpfr_div (tmp, tmp, pi, MPFR_RNDN);
+ /* tmp = acos(x)/Pi * (1 + theta3)^3 */
+ mpfr_mul_ui (tmp, tmp, u, MPFR_RNDN);
+ /* tmp = acos(x)*u/Pi * (1 + theta4)^4 */
+ mpfr_div_2ui (tmp, tmp, 1, MPFR_RNDN); /* exact */
+ /* tmp = acos(x)*u/(2*Pi) * (1 + theta4)^4 */
+ /* since |(1 + theta4)^4 - 1| <= 8*|theta4| for prec >= 2,
+ the relative error is less than 2^(3-prec) */
+ if (MPFR_LIKELY (MPFR_CAN_ROUND (tmp, prec - 3,
+ MPFR_PREC (y), rnd_mode)))
+ break;
+ MPFR_ZIV_NEXT (loop, prec);
+ mpfr_set_prec (tmp, prec);
+ mpfr_set_prec (pi, prec);
+ }
+ MPFR_ZIV_FREE (loop);
+
+ inexact = mpfr_set (y, tmp, rnd_mode);
+ mpfr_clear (tmp);
+ mpfr_clear (pi);
+
+ end:
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_check_range (y, inexact, rnd_mode);
+}
+
+int
+mpfr_acospi (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ return mpfr_acosu (y, x, 2, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/add.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/add.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/add.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_add -- add two floating-point numbers
-Copyright 1999-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/add1.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/add1.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/add1.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_add1 -- internal function to perform a "real" addition
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/add1sp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/add1sp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/add1sp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_add1sp -- internal function to perform a "real" addition
All the op must have the same precision
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/add1sp1_extracted.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/add1sp1_extracted.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/add1sp1_extracted.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -4,7 +4,7 @@
Source: https://github.com/project-everest/hacl-star/tree/dev_mpfr/code/mpfr
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/add_d.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/add_d.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/add_d.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_add_d -- add a multiple precision floating-point number
to a machine double precision float
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/add_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/add_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/add_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_add_ui -- add a floating-point number with a machine integer
-Copyright 2000-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2000-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/agm.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/agm.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/agm.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_agm -- arithmetic-geometric mean of two floating-point numbers
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/ai.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/ai.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/ai.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_ai -- Airy function Ai
-Copyright 2010-2022 Free Software Foundation, Inc.
+Copyright 2010-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -188,12 +188,12 @@
wprec = MPFR_ADD_PREC (prec, t);
}
- mpfr_init (ti);
- mpfr_init (tip1);
- mpfr_init (temp1);
- mpfr_init (temp2);
- mpfr_init (x3);
- mpfr_init (s);
+ mpfr_init2 (ti, wprec);
+ mpfr_init2 (tip1, wprec);
+ mpfr_init2 (temp1, wprec);
+ mpfr_init2 (temp2, wprec);
+ mpfr_init2 (x3, wprec);
+ mpfr_init2 (s, wprec);
/* ZIV loop */
for (;;)
@@ -420,13 +420,13 @@
z = (mpfr_t *) mpfr_allocate_func ( (L + 1) * sizeof (mpfr_t) );
MPFR_ASSERTN (z != NULL);
for (j=0; j<=L; j++)
- mpfr_init (z[j]);
+ mpfr_init2 (z[j], wprec);
- mpfr_init (s);
- mpfr_init (u0); mpfr_init (u1);
- mpfr_init (result);
- mpfr_init (temp1);
- mpfr_init (temp2);
+ mpfr_init2 (s, wprec);
+ mpfr_init2 (u0, wprec); mpfr_init2 (u1, wprec);
+ mpfr_init2 (result, wprec);
+ mpfr_init2 (temp1, wprec);
+ mpfr_init2 (temp2, wprec);
/* ZIV loop */
for (;;)
@@ -573,7 +573,7 @@
z = (mpfr_t *) mpfr_allocate_func ( (L + 1) * sizeof (mpfr_t));
MPFR_ASSERTN (z != NULL);
for (j=0; j<=L; j++)
- mpfr_init (z[j]);
+ mpfr_init2 (z[j], wprec);
if (correctBits == 0)
{
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/amd/mparam.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/amd/mparam.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/amd/mparam.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Various Thresholds of MPFR, not exported. -*- mode: C -*-
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/arm/mparam.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/arm/mparam.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/arm/mparam.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Various Thresholds of MPFR, not exported. -*- mode: C -*-
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/asin.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/asin.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/asin.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_asin -- arc-sinus of a floating-point number
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/asinh.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/asinh.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/asinh.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_asinh -- inverse hyperbolic sine
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/asinu.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/asinu.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/asinu.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,164 @@
+/* mpfr_asinu -- asinu(x) = asin(x)*u/(2*pi)
+ mpfr_asinpi -- asinpi(x) = asin(x)/pi
+
+Copyright 2021-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#include "mpfr-impl.h"
+
+/* put in y the correctly rounded value of asin(x)*u/(2*pi) */
+int
+mpfr_asinu (mpfr_ptr y, mpfr_srcptr x, unsigned long u, mpfr_rnd_t rnd_mode)
+{
+ mpfr_t tmp, pi;
+ mpfr_prec_t prec;
+ int compared, inexact;
+ MPFR_SAVE_EXPO_DECL (expo);
+ MPFR_ZIV_DECL (loop);
+
+ MPFR_LOG_FUNC
+ (("x[%Pu]=%.*Rg u=%lu rnd=%d", mpfr_get_prec(x), mpfr_log_prec, x, u,
+ rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ inexact));
+
+ /* Singular cases */
+ if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
+ {
+ if (MPFR_IS_NAN (x) || MPFR_IS_INF (x))
+ {
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+ else /* necessarily x=0 */
+ {
+ MPFR_ASSERTD(MPFR_IS_ZERO(x));
+ /* asin(0)=0 with same sign, even when u=0 to ensure
+ asinu(-x,u) = -asinu(x,u) */
+ MPFR_SET_ZERO (y);
+ MPFR_SET_SAME_SIGN (y, x);
+ MPFR_RET (0); /* exact result */
+ }
+ }
+
+ compared = mpfr_cmpabs_ui (x, 1);
+ if (compared > 0)
+ {
+ /* asinu(x) = NaN for |x| > 1, included for u=0, since NaN*0 = NaN */
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+
+ if (u == 0) /* return 0 with sign of x */
+ {
+ MPFR_SET_ZERO (y);
+ MPFR_SET_POS (y);
+ MPFR_RET (0);
+ }
+
+ if (compared == 0)
+ {
+ /* |x| = 1: asinu(1,u) = u/4, asinu(-1,u)=-u/4 */
+ /* we can't use mpfr_set_si_2exp with -u since -u might not be
+ representable as long */
+ if (MPFR_SIGN(x) > 0)
+ return mpfr_set_ui_2exp (y, u, -2, rnd_mode);
+ else
+ {
+ inexact = mpfr_set_ui_2exp (y, u, -2, MPFR_INVERT_RND(rnd_mode));
+ MPFR_CHANGE_SIGN(y);
+ return -inexact;
+ }
+ }
+
+ /* asin(+/-1/2) = +/-pi/6, thus asin(+/-1/2,u) = +/-u/12 is exact when u is
+ a multiple of 3 */
+ if (mpfr_cmp_si_2exp (x, MPFR_SIGN(x), -1) == 0 && (u % 3) == 0)
+ {
+ long v = u / 3;
+ if (MPFR_IS_NEG (x))
+ v = -v;
+ return mpfr_set_si_2exp (y, v, -2, rnd_mode);
+ }
+
+ prec = MPFR_PREC (y);
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ prec += MPFR_INT_CEIL_LOG2(prec) + 10;
+
+ mpfr_init2 (tmp, prec);
+ mpfr_init2 (pi, prec);
+
+ MPFR_ZIV_INIT (loop, prec);
+ for (;;)
+ {
+ /* In the error analysis below, each thetax denotes a variable such that
+ |thetax| <= 2^(1-prec) */
+ mpfr_asin (tmp, x, MPFR_RNDA);
+ /* tmp = asin(x) * (1 + theta1), and tmp cannot be zero since we rounded
+ away from zero, and the case x=0 was treated before */
+ /* first multiply by u to avoid underflow issues */
+ mpfr_mul_ui (tmp, tmp, u, MPFR_RNDA);
+ /* tmp = asin(x)*u * (1 + theta2)^2, and |tmp| >= 0.5*2^emin */
+ mpfr_const_pi (pi, MPFR_RNDZ); /* round toward zero since we we will
+ divide by pi, to round tmp away */
+ /* pi = Pi * (1 + theta3) */
+ mpfr_div (tmp, tmp, pi, MPFR_RNDA);
+ /* tmp = asin(x)*u/Pi * (1 + theta4)^4, with |tmp| > 0 */
+ /* since we rounded away from 0, if we get 0.5*2^emin here, it means
+ |asinu(x,u)| < 0.25*2^emin (pi is not exact) thus we have underflow */
+ if (MPFR_EXP(tmp) == __gmpfr_emin)
+ {
+ /* mpfr_underflow rounds away for RNDN */
+ mpfr_clear (tmp);
+ mpfr_clear (pi);
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_underflow (y,
+ (rnd_mode == MPFR_RNDN) ? MPFR_RNDZ : rnd_mode, 1);
+ }
+ mpfr_div_2ui (tmp, tmp, 1, MPFR_RNDA); /* exact */
+ /* tmp = asin(x)*u/(2*Pi) * (1 + theta4)^4 */
+ /* since |(1 + theta4)^4 - 1| <= 8*|theta4| for prec >= 3,
+ the relative error is less than 2^(4-prec) */
+ MPFR_ASSERTD(!MPFR_IS_ZERO(tmp));
+ if (MPFR_LIKELY (MPFR_CAN_ROUND (tmp, prec - 4,
+ MPFR_PREC (y), rnd_mode)))
+ break;
+ MPFR_ZIV_NEXT (loop, prec);
+ mpfr_set_prec (tmp, prec);
+ mpfr_set_prec (pi, prec);
+ }
+ MPFR_ZIV_FREE (loop);
+
+ inexact = mpfr_set (y, tmp, rnd_mode);
+ mpfr_clear (tmp);
+ mpfr_clear (pi);
+
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_check_range (y, inexact, rnd_mode);
+}
+
+int
+mpfr_asinpi (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ return mpfr_asinu (y, x, 2, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/atan.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/atan.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/atan.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_atan -- arc-tangent of a floating-point number
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/atan2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/atan2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/atan2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_atan2 -- arc-tan 2 of a floating-point number
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/atan2u.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/atan2u.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/atan2u.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,361 @@
+/* mpfr_atan2u -- atan2u(y,x,u) = atan(|y/x|)*u/(2*pi) for x > 0
+ atan2u(y,x,u) = 1-atan(|y/x|)*u/(2*pi) for x < 0
+ mpfr_atan2pi -- atan2pi(x) = atan2u(u=2)
+
+Copyright 2021-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#include "mpfr-impl.h"
+
+#define ULSIZE (sizeof (unsigned long) * CHAR_BIT)
+
+/* z <- s*u*2^e, with e between -3 and -1 */
+static int
+mpfr_atan2u_aux1 (mpfr_ptr z, unsigned long u, int e, int s,
+ mpfr_rnd_t rnd_mode)
+{
+ if (s > 0)
+ return mpfr_set_ui_2exp (z, u, e, rnd_mode);
+ else
+ {
+ int inex;
+
+ rnd_mode = MPFR_INVERT_RND (rnd_mode);
+ inex = mpfr_set_ui_2exp (z, u, e, rnd_mode);
+ MPFR_CHANGE_SIGN (z);
+ return -inex;
+ }
+}
+
+/* z <- s*3*u*2^e, with e between -3 and -1 */
+static int
+mpfr_atan2u_aux2 (mpfr_ptr z, unsigned long u, int e, int s,
+ mpfr_rnd_t rnd_mode)
+{
+ int inex;
+ mpfr_t t;
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ MPFR_SAVE_EXPO_MARK (expo);
+ mpfr_init2 (t, ULSIZE + 2);
+ inex = mpfr_set_ui_2exp (t, u, e, MPFR_RNDZ); /* exact */
+ MPFR_ASSERTD (inex == 0);
+ inex = mpfr_mul_ui (t, t, 3, MPFR_RNDZ); /* exact */
+ MPFR_ASSERTD (inex == 0);
+ if (s < 0)
+ MPFR_CHANGE_SIGN (t);
+ inex = mpfr_set (z, t, rnd_mode);
+ mpfr_clear (t);
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_check_range (z, inex, rnd_mode);
+}
+
+/* return round(sign(s)*(u/2-eps),rnd_mode), where eps < 1/2*ulp(u/2) */
+static int
+mpfr_atan2u_aux3 (mpfr_ptr z, unsigned long u, int s, mpfr_rnd_t rnd_mode)
+{
+ mpfr_t t;
+ mpfr_prec_t prec;
+ int inex;
+
+ prec = (MPFR_PREC(z) + 2 > ULSIZE) ? MPFR_PREC(z) + 2 : ULSIZE;
+ /* prec >= PREC(z)+2 and prec >= ULSIZE */
+ mpfr_init2 (t, prec);
+ mpfr_set_ui_2exp (t, u, -1, MPFR_RNDN); /* exact since prec >= ULSIZE */
+ mpfr_nextbelow (t);
+ /* u/2 - 1/4*ulp_p(u/2) <= t <= u/2, where p = PREC(z),
+ which ensures round_p(t) = round_p(u/2-eps) */
+ if (s < 0)
+ mpfr_neg (t, t, MPFR_RNDN);
+ inex = mpfr_set (z, t, rnd_mode);
+ mpfr_clear (t);
+ return inex;
+}
+
+/* return round(sign(y)*(u/4-sign(x)*eps),rnd_mode),
+ where eps < 1/2*ulp(u/4) */
+static int
+mpfr_atan2u_aux4 (mpfr_ptr z, mpfr_srcptr y, mpfr_srcptr x, unsigned long u,
+ mpfr_rnd_t rnd_mode)
+{
+ mpfr_t t;
+ mpfr_prec_t prec;
+ int inex;
+
+ prec = (MPFR_PREC(z) > ULSIZE) ? MPFR_PREC(z) + 2 : ULSIZE + 2;
+ /* prec >= PREC(z)+2 and prec >= ULSIZE + 2 */
+ mpfr_init2 (t, prec);
+ mpfr_set_ui_2exp (t, u, -2, MPFR_RNDN); /* exact */
+ if (MPFR_SIGN(x) > 0)
+ mpfr_nextbelow (t);
+ else
+ mpfr_nextabove (t);
+ if (MPFR_SIGN(y) < 0)
+ mpfr_neg (t, t, MPFR_RNDN);
+ inex = mpfr_set (z, t, rnd_mode);
+ mpfr_clear (t);
+ return inex;
+}
+
+/* deal with underflow case, i.e., when y/x rounds to zero */
+static int
+mpfr_atan2u_underflow (mpfr_ptr z, mpfr_srcptr y, mpfr_srcptr x,
+ unsigned long u, mpfr_rnd_t rnd_mode)
+{
+ mpfr_exp_t e = MPFR_GET_EXP(y) - MPFR_GET_EXP(x) + (ULSIZE - 1);
+ /* Detect underflow: since |atan(|y/x|)| < |y/x| for |y/x| < 1,
+ |atan2u(y,x,u)| < |y/x|*u/(2*pi) < 2^(ULSIZE-2)*|y/x|
+ < 2^(EXP(y)-EXP(x)+(ULSIZE-1)).
+ For x > 0, we have underflow when
+ EXP(y)-EXP(x)+(ULSIZE-1) < emin.
+ For x < 0, we have underflow when
+ EXP(y)-EXP(x)+(ULSIZE-1) < EXP(u/2)-prec. */
+ if (MPFR_IS_POS(x))
+ {
+ MPFR_ASSERTN(e < __gmpfr_emin);
+ return mpfr_underflow (z,
+ (rnd_mode == MPFR_RNDN) ? MPFR_RNDZ : rnd_mode, MPFR_SIGN(y));
+ }
+ else
+ {
+ MPFR_ASSERTD (MPFR_IS_NEG(x));
+ MPFR_ASSERTN(e < (ULSIZE - 1) - MPFR_PREC(z));
+ return mpfr_atan2u_aux3 (z, u, MPFR_SIGN(y), rnd_mode);
+ }
+}
+
+/* deal with overflow case, i.e., when y/x rounds to infinity */
+static int
+mpfr_atan2u_overflow (mpfr_ptr z, mpfr_srcptr y, mpfr_srcptr x,
+ unsigned long u, mpfr_rnd_t rnd_mode)
+{
+ /* When t goes to +Inf, pi/2 - 1/t < atan(t) < pi/2,
+ thus u/4 - u/(2*pi*t) < atanu(t) < u/4.
+ As soon as u/(2*pi*t) < 1/2*ulp(u/4), the result is either u/4
+ or the number just below.
+ Here t = y/x, thus 1/t <= x/y < 2^(EXP(x)-EXP(y)+1),
+ and u/(2*pi*t) < 2^(EXP(x)-EXP(y)+(ULSIZE-2)). */
+ mpfr_exp_t e = MPFR_GET_EXP(x) - MPFR_GET_EXP(y) + (ULSIZE - 2);
+ mpfr_exp_t ulpz = (ULSIZE - 2) - MPFR_PREC(z); /* ulp(u/4) <= 2^ulpz */
+ MPFR_ASSERTN (e < ulpz - 1);
+ return mpfr_atan2u_aux4 (z, y, x, u, rnd_mode);
+}
+
+/* put in z the correctly rounded value of atan2y(y,x,u) */
+int
+mpfr_atan2u (mpfr_ptr z, mpfr_srcptr y, mpfr_srcptr x, unsigned long u,
+ mpfr_rnd_t rnd_mode)
+{
+ mpfr_t tmp;
+ mpfr_prec_t prec;
+ int inex;
+ MPFR_SAVE_EXPO_DECL (expo);
+ MPFR_ZIV_DECL (loop);
+
+ MPFR_LOG_FUNC
+ (("y[%Pu]=%.*Rg x[%Pu]=%.*Rg u=%lu rnd=%d",
+ mpfr_get_prec(y), mpfr_log_prec, y,
+ mpfr_get_prec(x), mpfr_log_prec, x,
+ u, rnd_mode),
+ ("z[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (z), mpfr_log_prec, z,
+ inex));
+
+ /* Special cases */
+ if (MPFR_ARE_SINGULAR (x, y))
+ {
+ if (MPFR_IS_NAN (x) || MPFR_IS_NAN (y))
+ {
+ MPFR_SET_NAN (z);
+ MPFR_RET_NAN;
+ }
+ /* remains (y=Inf,x=Inf), (Inf,0), (Inf,regular), (0,Inf), (0,0),
+ (0,regular), (regular,Inf), (regular,0) */
+ if (MPFR_IS_INF (x))
+ {
+ /* cases (y=Inf,x=Inf), (0,Inf), (regular,Inf) */
+ if (MPFR_IS_INF (y))
+ {
+ if (MPFR_IS_NEG (x))
+ {
+ /* atan2Pi(+/-Inf,-Inf) = +/-3/4,
+ atan2u(+/-Inf,-Inf,u) = +/-3u/8 */
+ return mpfr_atan2u_aux2 (z, u, -3, MPFR_SIGN (y), rnd_mode);
+ }
+ else /* x > 0 */
+ {
+ /* atan2Pi(+/-Inf,-Inf) = +/-1/4,
+ atan2u(+/-Inf,-Inf,u) = +/-u/8 */
+ return mpfr_atan2u_aux1 (z, u, -3, MPFR_SIGN (y), rnd_mode);
+ }
+ }
+ /* remains (y,x) = (0,Inf) and (regular,Inf),
+ in which cases the IEEE 754-2019 rules for (y=0,x<>0)
+ and for (y<>0,x Inf) coincide */
+ if (MPFR_IS_NEG (x))
+ /* y>0: atan2Pi(+/-y,-Inf) = +/-1,
+ atan2u(+/-y,-Inf,u) = +/-u/2 */
+ return mpfr_atan2u_aux1 (z, u, -1, MPFR_SIGN (y), rnd_mode);
+ else
+ {
+ /* y>0: atan2Pi(+/-y,+Inf) = +/-0,
+ atan2u(+/-y,+Inf,u) = +/-0 */
+ MPFR_SET_ZERO (z);
+ MPFR_SET_SAME_SIGN (z, y);
+ MPFR_RET (0);
+ }
+ }
+ /* remains (y=Inf,x=0), (Inf,regular), (0,0), (0,regular), (regular,0) */
+ if (MPFR_IS_INF (y))
+ /* x is zero or regular */
+ /* atan2Pi(+/-Inf, x) = +/-1/2, atan2u(+/-Inf, x, u) = +/-u/4 */
+ return mpfr_atan2u_aux1 (z, u, -2, MPFR_SIGN(y), rnd_mode);
+ /* remains (y=0,x=0), (0,regular), (regular,0) */
+ if (MPFR_IS_ZERO (y))
+ {
+ if (MPFR_IS_NEG (x))
+ {
+ /* atan2Pi(+/-0, x) = +/-1, atan2u(+/-0, x, u) = +/-u/2 */
+ return mpfr_atan2u_aux1 (z, u, -1, MPFR_SIGN(y), rnd_mode);
+ }
+ else /* case x = +0 or x > 0 */
+ {
+ /* atan2Pi(+/-0, x) = +/-0, atan2u(+/-0, x, u) = +/-0 */
+ MPFR_SET_ZERO (z); /* does not modify sign, in case z=y */
+ MPFR_SET_SAME_SIGN (z, y);
+ MPFR_RET (0); /* exact result */
+ }
+ }
+ /* remains (regular,0) */
+ if (MPFR_IS_ZERO (x))
+ {
+ /* y<0: atan2Pi(y,+/-0) = -1/2, thus atan2u(y,+/-0,u) = -u/4 */
+ /* y>0: atan2Pi(y,+/-0) = 1/2, thus atan2u(y,+/-0,u) = u/4 */
+ return mpfr_atan2u_aux1 (z, u, -2, MPFR_SIGN(y), rnd_mode);
+ }
+ /* no special case should remain */
+ MPFR_RET_NEVER_GO_HERE ();
+ }
+
+ /* IEEE 754-2019 says that atan2Pi is odd with respect to y */
+
+ /* now both y and x are regular */
+ if (mpfr_cmpabs (y, x) == 0)
+ {
+ if (MPFR_IS_POS (x))
+ /* atan2u (+/-x,x,u) = +/u/8 for x > 0 */
+ return mpfr_atan2u_aux1 (z, u, -3, MPFR_SIGN(y), rnd_mode);
+ else /* x < 0 */
+ /* atan2u (+/-x,x,u) = -/+3u/8 for x > 0 */
+ return mpfr_atan2u_aux2 (z, u, -3, MPFR_SIGN(y), rnd_mode);
+ }
+
+ if (u == 0) /* return 0 with sign of y for x > 0,
+ and 1 with sign of y for x < 0 */
+ {
+ if (MPFR_SIGN(x) > 0)
+ {
+ MPFR_SET_ZERO (z);
+ MPFR_SET_SAME_SIGN (z, y);
+ MPFR_RET (0);
+ }
+ else
+ return mpfr_set_si (z, MPFR_SIGN(y) > 0 ? 1 : -1, rnd_mode);
+ }
+
+ MPFR_SAVE_EXPO_MARK (expo);
+ prec = MPFR_PREC (z);
+ prec += MPFR_INT_CEIL_LOG2(prec) + 10;
+ mpfr_init2 (tmp, prec);
+ MPFR_ZIV_INIT (loop, prec);
+ for (;;)
+ {
+ mpfr_exp_t expt, e;
+ /* atan2u(-y,x,u) = -atan(y,x,u)
+ atan2u(y,x,u) = atan(|y/x|)*u/(2*pi) for x > 0
+ atan2u(y,x,u) = u/2-atan(|y/x|)*u/(2*pi) for x < 0
+ atan2pi atan2u
+ First quadrant: [0,1/2] [0,u/4]
+ Second quadrant: [1/2,1] [u/4,u/2]
+ Third quadrant: [-1,-1/2] [-u/2,-u/4]
+ Fourth quadrant: [-1/2,0] [-u/4,0] */
+ inex = mpfr_div (tmp, y, x, MPFR_RNDN);
+ if (MPFR_IS_ZERO(tmp))
+ {
+ mpfr_clear (tmp);
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_atan2u_underflow (z, y, x, u, rnd_mode);
+ }
+ if (MPFR_IS_INF(tmp))
+ {
+ mpfr_clear (tmp);
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_atan2u_overflow (z, y, x, u, rnd_mode);
+ }
+ MPFR_SET_SIGN (tmp, 1);
+ expt = MPFR_GET_EXP(tmp);
+ /* |tmp - |y/x|| <= e1 := 1/2*ulp(tmp) = 2^(expt-prec-1) */
+ inex |= mpfr_atanu (tmp, tmp, u, MPFR_RNDN);
+ /* the derivative of atan(t) is 1/(1+t^2), thus that of atanu(t) is
+ u/(1+t^2)/(2*pi), and if tmp2 is the new value of tmp, we have
+ |tmp2 - atanu|y/x|| <= 1/2*ulp(tmp2) + e1*u/(1+tmp^2)/4 */
+ e = (expt < 1) ? 0 : expt - 1;
+ /* max(1,|tmp|) >= 2^e thus 1/(1+tmp^2) <= 2^(-2*e) */
+ e = expt - 2 * e + MPFR_INT_CEIL_LOG2(u) - 2;
+ /* now e1*u/(1+tmp^2)/4 <= 2^(e-prec-1) */
+ /* |tmp2 - atanu(y/x)| <= 1/2*ulp(tmp2) + 2^(e-prec-1) */
+ e = (e < MPFR_GET_EXP(tmp)) ? MPFR_GET_EXP(tmp) : e;
+ /* |tmp2 - atanu(y/x)| <= 2^(e-prec) */
+ if (MPFR_SIGN (x) < 0)
+ { /* compute u/2-tmp */
+ mpfr_mul_2ui (tmp, tmp, 1, MPFR_RNDN); /* error <= 2^(e+1-prec) */
+ mpfr_ui_sub (tmp, u, tmp, MPFR_RNDN);
+ expt = MPFR_GET_EXP(tmp);
+ /* error <= 2^(expt-prec-1) + 2^(e+1-prec) */
+ e = (expt - 1 > e + 1) ? expt - 1 : e + 1;
+ /* error <= 2^(e+1-prec) */
+ mpfr_div_2ui (tmp, tmp, 1, MPFR_RNDN);
+ /* error <= 2^(e-prec) */
+ }
+ /* both with x>0 and x<0, we have error <= 2^(e-prec),
+ now we want error <= 2^(expt-prec+err)
+ thus err = e-expt */
+ e -= MPFR_GET_EXP(tmp);
+ if (MPFR_SIGN(y) < 0) /* atan2u is odd with respect to y */
+ MPFR_CHANGE_SIGN(tmp);
+ if (MPFR_LIKELY (MPFR_CAN_ROUND (tmp, prec - e,
+ MPFR_PREC (z), rnd_mode)))
+ break;
+ MPFR_ZIV_NEXT (loop, prec);
+ mpfr_set_prec (tmp, prec);
+ }
+ MPFR_ZIV_FREE (loop);
+ inex = mpfr_set (z, tmp, rnd_mode);
+ mpfr_clear (tmp);
+ MPFR_SAVE_EXPO_FREE (expo);
+
+ return mpfr_check_range (z, inex, rnd_mode);
+}
+
+int
+mpfr_atan2pi (mpfr_ptr z, mpfr_srcptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ return mpfr_atan2u (z, y, x, 2, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/atanh.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/atanh.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/atanh.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_atanh -- Inverse Hyperbolic Tangente
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/atanu.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/atanu.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/atanu.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,189 @@
+/* mpfr_atanu -- atanu(x) = atan(x)*u/(2*pi)
+ mpfr_atanpi -- atanpi(x) = atan(x)/pi
+
+Copyright 2021-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#include "mpfr-impl.h"
+
+/* put in y the correctly rounded value of atan(x)*u/(2*pi) */
+int
+mpfr_atanu (mpfr_ptr y, mpfr_srcptr x, unsigned long u, mpfr_rnd_t rnd_mode)
+{
+ mpfr_t tmp, pi;
+ mpfr_prec_t prec;
+ mpfr_exp_t expx;
+ int inex;
+ MPFR_SAVE_EXPO_DECL (expo);
+ MPFR_ZIV_DECL (loop);
+
+ MPFR_LOG_FUNC
+ (("x[%Pu]=%.*Rg u=%lu rnd=%d", mpfr_get_prec(x), mpfr_log_prec, x, u,
+ rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ inex));
+
+ /* Singular cases */
+ if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
+ {
+ if (MPFR_IS_NAN (x))
+ {
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+ else if (MPFR_IS_INF (x))
+ {
+ /* atanu(+Inf,u) = u/4, atanu(-Inf,u) = -u/4 */
+ if (MPFR_IS_POS (x))
+ return mpfr_set_ui_2exp (y, u, -2, rnd_mode);
+ else
+ {
+ inex = mpfr_set_ui_2exp (y, u, -2, MPFR_INVERT_RND (rnd_mode));
+ MPFR_CHANGE_SIGN (y);
+ return -inex;
+ }
+ }
+ else /* necessarily x=0 */
+ {
+ MPFR_ASSERTD(MPFR_IS_ZERO(x));
+ /* atan(0)=0 with same sign, even when u=0 to ensure
+ atanu(-x,u) = -atanu(x,u) */
+ MPFR_SET_ZERO (y);
+ MPFR_SET_SAME_SIGN (y, x);
+ MPFR_RET (0); /* exact result */
+ }
+ }
+
+ if (u == 0) /* return 0 with sign of x, which is coherent with case x=0 */
+ {
+ MPFR_SET_ZERO (y);
+ MPFR_SET_SAME_SIGN (y, x);
+ MPFR_RET (0);
+ }
+
+ if (mpfr_cmpabs_ui (x, 1) == 0)
+ {
+ /* |x| = 1: atanu(1,u) = u/8, atanu(-1,u)=-u/8 */
+ /* we can't use mpfr_set_si_2exp with -u since -u might not be
+ representable as long */
+ if (MPFR_SIGN(x) > 0)
+ return mpfr_set_ui_2exp (y, u, -3, rnd_mode);
+ else
+ {
+ inex = mpfr_set_ui_2exp (y, u, -3, MPFR_INVERT_RND(rnd_mode));
+ MPFR_CHANGE_SIGN(y);
+ return -inex;
+ }
+ }
+
+ /* For x>=1, we have pi/2-1/x < atan(x) < pi/2, thus
+ u/4-u/(2*pi*x) < atanu(x,u) < u/4, and the relative difference between
+ atanu(x,u) and u/4 is less than 2/(pi*x) < 1/x <= 2^(1-EXP(x)).
+ If the relative difference is <= 2^(-prec-2), then the difference
+ between atanu(x,u) and u/4 is <= 1/4*ulp(u/4) <= 1/2*ulp(RN(u/4)).
+ We also require x >= 2^64, which implies x > 2*u/pi, so that
+ (u-1)/4 < u/4-u/(2*pi*x) < u/4. */
+ expx = MPFR_GET_EXP(x);
+ if (expx >= 65 && expx - 1 >= MPFR_PREC(y) + 2)
+ {
+ prec = (MPFR_PREC(y) <= 63) ? 65 : MPFR_PREC(y) + 2;
+ /* now prec > 64 and prec > MPFR_PREC(y)+1 */
+ mpfr_init2 (tmp, prec);
+ /* since expx >= 65, we have emax >= 65, thus u is representable here,
+ and we don't need to work in an extended exponent range */
+ inex = mpfr_set_ui (tmp, u, MPFR_RNDN); /* exact since prec >= 64 */
+ MPFR_ASSERTD(inex == 0);
+ mpfr_nextbelow (tmp);
+ /* Since prec >= 65, the last significant bit of tmp is 1, and since
+ prec > PREC(y), tmp is not representable in the target precision,
+ which ensures we will get a correct ternary value below. */
+ MPFR_ASSERTD(mpfr_min_prec(tmp) > MPFR_PREC(y));
+ if (MPFR_SIGN(x) < 0)
+ MPFR_CHANGE_SIGN(tmp);
+ /* since prec >= PREC(y)+2, the rounding of tmp is correct */
+ inex = mpfr_div_2ui (y, tmp, 2, rnd_mode);
+ mpfr_clear (tmp);
+ return inex;
+ }
+
+ prec = MPFR_PREC (y);
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ prec += MPFR_INT_CEIL_LOG2(prec) + 10;
+
+ mpfr_init2 (tmp, prec);
+ mpfr_init2 (pi, prec);
+
+ MPFR_ZIV_INIT (loop, prec);
+ for (;;)
+ {
+ /* In the error analysis below, each thetax denotes a variable such that
+ |thetax| <= 2^(1-prec) */
+ mpfr_atan (tmp, x, MPFR_RNDA);
+ /* tmp = atan(x) * (1 + theta1), and tmp cannot be zero since we rounded
+ away from zero, and the case x=0 was treated before */
+ /* first multiply by u to avoid underflow issues */
+ mpfr_mul_ui (tmp, tmp, u, MPFR_RNDA);
+ /* tmp = atan(x)*u * (1 + theta2)^2, and |tmp| >= 0.5*2^emin */
+ mpfr_const_pi (pi, MPFR_RNDZ); /* round toward zero since we we will
+ divide by pi, to round tmp away */
+ /* pi = Pi * (1 + theta3) */
+ mpfr_div (tmp, tmp, pi, MPFR_RNDA);
+ /* tmp = atan(x)*u/Pi * (1 + theta4)^4, with |tmp| > 0 */
+ /* since we rounded away from 0, if we get 0.5*2^emin here, it means
+ |atanu(x,u)| < 0.25*2^emin (pi is not exact) thus we have underflow */
+ if (MPFR_EXP(tmp) == __gmpfr_emin)
+ {
+ /* mpfr_underflow rounds away for RNDN */
+ mpfr_clear (tmp);
+ mpfr_clear (pi);
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_underflow (y,
+ (rnd_mode == MPFR_RNDN) ? MPFR_RNDZ : rnd_mode, 1);
+ }
+ mpfr_div_2ui (tmp, tmp, 1, MPFR_RNDA); /* exact */
+ /* tmp = atan(x)*u/(2*Pi) * (1 + theta4)^4 */
+ /* since |(1 + theta4)^4 - 1| <= 8*|theta4| for prec >= 3,
+ the relative error is less than 2^(4-prec) */
+ MPFR_ASSERTD(!MPFR_IS_ZERO(tmp));
+ if (MPFR_LIKELY (MPFR_CAN_ROUND (tmp, prec - 4,
+ MPFR_PREC (y), rnd_mode)))
+ break;
+ MPFR_ZIV_NEXT (loop, prec);
+ mpfr_set_prec (tmp, prec);
+ mpfr_set_prec (pi, prec);
+ }
+ MPFR_ZIV_FREE (loop);
+
+ inex = mpfr_set (y, tmp, rnd_mode);
+ mpfr_clear (tmp);
+ mpfr_clear (pi);
+
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_check_range (y, inex, rnd_mode);
+}
+
+int
+mpfr_atanpi (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ return mpfr_atanu (y, x, 2, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/bernoulli.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/bernoulli.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/bernoulli.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* bernoulli -- internal function to compute Bernoulli numbers.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/beta.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/beta.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/beta.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_beta -- beta function
-Copyright 2017-2022 Free Software Foundation, Inc.
+Copyright 2017-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/buildopt.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/buildopt.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/buildopt.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* buildopt.c -- functions giving information about options used during the
mpfr library compilation
-Copyright 2009-2022 Free Software Foundation, Inc.
+Copyright 2009-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cache.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cache.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cache.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_cache -- cache interface for multiple-precision constants in MPFR.
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cbrt.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cbrt.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cbrt.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_cbrt -- cube root function.
-Copyright 2002-2022 Free Software Foundation, Inc.
+Copyright 2002-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/check.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/check.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/check.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_check -- Check if a floating-point number has not been corrupted.
-Copyright 2003-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/clear.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/clear.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/clear.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_clear -- free the memory space allocated for a floating-point number
-Copyright 1999-2001, 2004-2022 Free Software Foundation, Inc.
+Copyright 1999-2001, 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/clears.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/clears.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/clears.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_clears -- free the memory space allocated for several
floating-point numbers
-Copyright 2003-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cmp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cmp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cmp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_cmp -- compare two floating-point numbers
-Copyright 1999, 2001, 2003-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001, 2003-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cmp2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cmp2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cmp2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_cmp2 -- exponent shift when subtracting two numbers.
-Copyright 1999-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_d.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_d.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_d.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_cmp_d -- compare a floating-point number with a double
-Copyright 2003-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_ld.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_ld.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_ld.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_cmp_d -- compare a floating-point number with a long double
-Copyright 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_si.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_si.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_si.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_cmp_si_2exp -- compare a floating-point number with a signed
machine integer multiplied by a power of 2
-Copyright 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cmp_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_cmp_ui_2exp -- compare a floating-point number with an unsigned
machine integer multiplied by a power of 2
-Copyright 1999, 2001-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cmpabs.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cmpabs.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cmpabs.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_cmpabs -- compare the absolute values of two FP numbers
-Copyright 1999, 2001-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cmpabs_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cmpabs_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cmpabs_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_cmpabs_ui -- compare the absolute value of FP to an unsigned long
-Copyright 2020-2022 Free Software Foundation, Inc.
+Copyright 2020-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/comparisons.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/comparisons.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/comparisons.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* comparison predicates
-Copyright 2002-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2002-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/compound.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/compound.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/compound.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,224 @@
+/* mpfr_compound_si --- compound(x,n) = (1+x)^n
+
+Copyright 2021-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H /* needed for MPFR_INT_CEIL_LOG2 */
+#include "mpfr-impl.h"
+
+/* assuming |(1+x)^n - 1| < 1/4*ulp(1), return correct rounding,
+ where s is the sign of n*log2(1+x) */
+static int
+mpfr_compound_near_one (mpfr_ptr y, int s, mpfr_rnd_t rnd_mode)
+{
+ mpfr_set_ui (y, 1, rnd_mode); /* exact */
+ if (rnd_mode == MPFR_RNDN || rnd_mode == MPFR_RNDF
+ || (s > 0 && (rnd_mode == MPFR_RNDZ || rnd_mode == MPFR_RNDD))
+ || (s < 0 && (rnd_mode == MPFR_RNDA || rnd_mode == MPFR_RNDU)))
+ {
+ /* round toward 1 */
+ return -s;
+ }
+ else if (s > 0) /* necessarily RNDA or RNDU */
+ {
+ /* round toward +Inf */
+ mpfr_nextabove (y);
+ return +1;
+ }
+ else /* necessarily s < 0 and RNDZ or RNDD */
+ {
+ /* round toward 0 */
+ mpfr_nextbelow (y);
+ return -1;
+ }
+}
+
+/* put in y the correctly rounded value of (1+x)^n */
+int
+mpfr_compound_si (mpfr_ptr y, mpfr_srcptr x, long n, mpfr_rnd_t rnd_mode)
+{
+ int inexact, compared, k, nloop;
+ mpfr_t t;
+ mpfr_exp_t e;
+ mpfr_prec_t prec;
+ MPFR_ZIV_DECL (loop);
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ MPFR_LOG_FUNC
+ (("x[%Pu]=%.*Rg n=%ld rnd=%d",
+ mpfr_get_prec(x), mpfr_log_prec, x, n, rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y, inexact));
+
+ /* Special cases */
+ if (MPFR_IS_SINGULAR (x))
+ {
+ if (MPFR_IS_INF (x) && MPFR_IS_NEG (x))
+ {
+ /* compound(-Inf,n) is NaN */
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+ else if (n == 0 || MPFR_IS_ZERO (x))
+ {
+ /* compound(x,0) = 1 for x >= -1 or NaN (the only special value
+ of x that is not concerned is -Inf, already handled);
+ compound(0,n) = 1 */
+ return mpfr_set_ui (y, 1, rnd_mode);
+ }
+ else if (MPFR_IS_NAN (x))
+ {
+ /* compound(NaN,n) is NaN, except for n = 0, already handled. */
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+ else if (MPFR_IS_INF (x)) /* x = +Inf */
+ {
+ MPFR_ASSERTD (MPFR_IS_POS (x));
+ if (n < 0) /* (1+Inf)^n = +0 for n < 0 */
+ MPFR_SET_ZERO (y);
+ else /* n > 0: (1+Inf)^n = +Inf */
+ MPFR_SET_INF (y);
+ MPFR_SET_POS (y);
+ MPFR_RET (0); /* exact 0 or infinity */
+ }
+ }
+
+ /* (1+x)^n = NaN for x < -1 */
+ compared = mpfr_cmp_si (x, -1);
+ if (compared < 0)
+ {
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+
+ /* compound(x,0) gives 1 for x >= 1 */
+ if (n == 0)
+ return mpfr_set_ui (y, 1, rnd_mode);
+
+ if (compared == 0)
+ {
+ if (n < 0)
+ {
+ /* compound(-1,n) = +Inf with divide-by-zero exception */
+ MPFR_SET_INF (y);
+ MPFR_SET_POS (y);
+ MPFR_SET_DIVBY0 ();
+ MPFR_RET (0);
+ }
+ else
+ {
+ /* compound(-1,n) = +0 */
+ MPFR_SET_ZERO (y);
+ MPFR_SET_POS (y);
+ MPFR_RET (0);
+ }
+ }
+
+ if (n == 1)
+ return mpfr_add_ui (y, x, 1, rnd_mode);
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ prec = MPFR_PREC(y);
+ prec += MPFR_INT_CEIL_LOG2 (prec) + 6;
+
+ mpfr_init2 (t, prec);
+
+ k = MPFR_INT_CEIL_LOG2(SAFE_ABS (unsigned long, n)); /* thus |n| <= 2^k */
+
+ MPFR_ZIV_INIT (loop, prec);
+ for (nloop = 0; ; nloop++)
+ {
+ /* we compute (1+x)^n as 2^(n*log2p1(x)) */
+ inexact = mpfr_log2p1 (t, x, MPFR_RNDN) != 0;
+ e = MPFR_GET_EXP(t);
+ /* |t - log2(1+x)| <= 1/2*ulp(t) = 2^(e-prec-1) */
+ inexact |= mpfr_mul_si (t, t, n, MPFR_RNDN) != 0;
+ /* |t - n*log2(1+x)| <= 2^(e2-prec-1) + |n|*2^(e-prec-1)
+ <= 2^(e2-prec-1) + 2^(e+k-prec-1) <= 2^(e+k-prec)
+ where |n| <= 2^k, and e2 is the new exponent of t. */
+ MPFR_ASSERTD(MPFR_GET_EXP(t) <= e + k);
+ e += k;
+ /* |t - n*log2(1+x)| <= 2^(e-prec) */
+ /* detect overflow */
+ if (nloop == 0 && mpfr_cmp_si (t, __gmpfr_emax) >= 0)
+ {
+ MPFR_ZIV_FREE (loop);
+ mpfr_clear (t);
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_overflow (y, rnd_mode, 1);
+ }
+ /* detect underflow */
+ if (nloop == 0 && mpfr_cmp_si (t, __gmpfr_emin - 1) <= 0)
+ {
+ MPFR_ZIV_FREE (loop);
+ mpfr_clear (t);
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_underflow (y,
+ (rnd_mode == MPFR_RNDN) ? MPFR_RNDZ : rnd_mode, 1);
+ }
+ /* Detect cases where result is 1 or 1+ulp(1) or 1-1/2*ulp(1):
+ |2^t - 1| = |exp(t*log(2)) - 1| <= |t|*log(2) < |t| */
+ if (nloop == 0 && MPFR_GET_EXP(t) < - (mpfr_exp_t) MPFR_PREC(y))
+ {
+ /* since ulp(1) = 2^(1-PREC(y)), we have |t| < 1/4*ulp(1) */
+ /* mpfr_compound_near_one must be called in the extended
+ exponent range, so that 1 is representable. */
+ inexact = mpfr_compound_near_one (y, MPFR_SIGN (t), rnd_mode);
+ goto end;
+ }
+ inexact |= mpfr_exp2 (t, t, MPFR_RNDA) != 0;
+ /* |t - (1+x)^n| <= ulp(t) + |t|*log(2)*2^(e-prec)
+ < 2^(EXP(t)-prec) + 2^(EXP(t)+e-prec) */
+ e = (e >= 0) ? e + 1 : 1;
+ /* now |t - (1+x)^n| < 2^(EXP(t)+e-prec) */
+
+ if (MPFR_LIKELY (inexact == 0 ||
+ MPFR_CAN_ROUND (t, prec - e, MPFR_PREC(y), rnd_mode)))
+ break;
+
+ /* Exact cases like compound(0.5,2) = 9/4 must be detected, since
+ except for 1+x power of 2, the log2p1 above will be inexact,
+ so that in the Ziv test, inexact != 0 and MPFR_CAN_ROUND will
+ fail (even for RNDN, as the ternary value cannot be determined),
+ yielding an infinite loop.
+ For an exact case in precision prec(y), 1+x will necessarily
+ be exact in precision prec(y), thus also in prec(t), where
+ prec(t) >= prec(y), and we can use mpfr_pow_si under this
+ condition (which will also evaluate some non-exact cases). */
+ if (mpfr_add_ui (t, x, 1, MPFR_RNDZ) == 0)
+ {
+ inexact = mpfr_pow_si (y, t, n, rnd_mode);
+ goto end;
+ }
+
+ MPFR_ZIV_NEXT (loop, prec);
+ mpfr_set_prec (t, prec);
+ }
+
+ inexact = mpfr_set (y, t, rnd_mode);
+
+ end:
+ MPFR_ZIV_FREE (loop);
+ mpfr_clear (t);
+
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_check_range (y, inexact, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/const_catalan.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/const_catalan.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/const_catalan.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_const_catalan -- compute Catalan's constant.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/const_euler.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/const_euler.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/const_euler.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_const_euler -- Euler's constant
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by Fredrik Johansson.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/const_log2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/const_log2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/const_log2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_const_log2 -- compute natural logarithm of 2
-Copyright 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/const_pi.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/const_pi.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/const_pi.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_const_pi -- compute Pi
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/constant.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/constant.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/constant.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* MPFR internal constant FP numbers
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/copysign.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/copysign.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/copysign.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_copysign -- Produce a value with the magnitude of x and sign bit of y
-Copyright 2001-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2001-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -34,5 +34,14 @@
int
mpfr_copysign (mpfr_ptr z, mpfr_srcptr x, mpfr_srcptr y, mpfr_rnd_t rnd_mode)
{
- return mpfr_set4 (z, x, rnd_mode, MPFR_SIGN (y));
+ if (MPFR_UNLIKELY (z != x))
+ return mpfr_set4 (z, x, rnd_mode, MPFR_SIGN (y));
+ else
+ {
+ MPFR_SET_SAME_SIGN (z, y);
+ if (MPFR_UNLIKELY (MPFR_IS_NAN (x)))
+ MPFR_RET_NAN;
+ else
+ MPFR_RET (0);
+ }
}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cos.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cos.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cos.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_cos -- cosine of a floating-point number
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -141,8 +141,8 @@
MPFR_GROUP_DECL (group);
MPFR_LOG_FUNC (
- ("x[%Pu]=%*.Rg rnd=%d", mpfr_get_prec (x), mpfr_log_prec, x, rnd_mode),
- ("y[%Pu]=%*.Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ ("x[%Pu]=%.*Rg rnd=%d", mpfr_get_prec (x), mpfr_log_prec, x, rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
inexact));
if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cosh.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cosh.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cosh.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_cosh -- hyperbolic cosine
-Copyright 2001-2002, 2004-2022 Free Software Foundation, Inc.
+Copyright 2001-2002, 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -34,8 +34,8 @@
MPFR_SAVE_EXPO_DECL (expo);
MPFR_LOG_FUNC (
- ("x[%Pu]=%*.Rg rnd=%d", mpfr_get_prec (xt), mpfr_log_prec, xt, rnd_mode),
- ("y[%Pu]=%*.Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ ("x[%Pu]=%.*Rg rnd=%d", mpfr_get_prec (xt), mpfr_log_prec, xt, rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
inexact));
if (MPFR_UNLIKELY(MPFR_IS_SINGULAR(xt)))
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/cosu.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cosu.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cosu.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,254 @@
+/* mpfr_cosu -- cosu(x) = cos(2*pi*x/u)
+ mpfr_cospi -- cospi(x) = cos(pi*x)
+
+Copyright 2020-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#include "mpfr-impl.h"
+
+/* put in y the correctly rounded value of cos(2*pi*x/u) */
+int
+mpfr_cosu (mpfr_ptr y, mpfr_srcptr x, unsigned long u, mpfr_rnd_t rnd_mode)
+{
+ mpfr_srcptr xp;
+ mpfr_prec_t precy, prec;
+ mpfr_exp_t expx, expt, err, log2u, erra, errb;
+ mpfr_t t, xr;
+ int inexact = 0, nloops = 0, underflow = 0;
+ MPFR_ZIV_DECL (loop);
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ MPFR_LOG_FUNC (
+ ("x[%Pu]=%.*Rg u=%lu rnd=%d", mpfr_get_prec (x), mpfr_log_prec, x, u,
+ rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ inexact));
+
+ if (u == 0 || MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
+ {
+ /* for u=0, return NaN */
+ if (u == 0 || MPFR_IS_NAN (x) || MPFR_IS_INF (x))
+ {
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+ else /* x is zero: cos(0) = 1 */
+ {
+ MPFR_ASSERTD (MPFR_IS_ZERO (x));
+ return mpfr_set_ui (y, 1, rnd_mode);
+ }
+ }
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ /* Range reduction. We do not need to reduce the argument if it is
+ already reduced (|x| < u).
+ Note that the case |x| = u is better in the "else" branch as it
+ will give xr = 0. */
+ if (mpfr_cmpabs_ui (x, u) < 0)
+ {
+ xp = x;
+ }
+ else
+ {
+ mpfr_exp_t p = MPFR_GET_PREC (x) - MPFR_GET_EXP (x);
+ int inex;
+
+ /* Let's compute xr = x mod u, with signbit(xr) = signbit(x), though
+ this doesn't matter.
+ The precision of xr is chosen to ensure that x mod u is exactly
+ representable in xr, e.g., the maximum size of u + the length of
+ the fractional part of x. Note that since |x| >= u in this branch,
+ the additional memory amount will not be more than the one of x.
+ */
+ mpfr_init2 (xr, sizeof (unsigned long) * CHAR_BIT + (p < 0 ? 0 : p));
+ MPFR_DBGRES (inex = mpfr_fmod_ui (xr, x, u, MPFR_RNDN)); /* exact */
+ MPFR_ASSERTD (inex == 0);
+ if (MPFR_IS_ZERO (xr))
+ {
+ mpfr_clear (xr);
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_set_ui (y, 1, rnd_mode);
+ }
+ xp = xr;
+ }
+
+#define CLEAR_XR \
+ do \
+ if (xp != x) \
+ { \
+ MPFR_ASSERTD (xp == xr); \
+ mpfr_clear (xr); \
+ } \
+ while (0)
+
+ /* now |xp/u| < 1 */
+
+ /* for x small, we have |cos(2*pi*x/u)-1| < 1/2*(2*pi*x/u)^2 < 2^5*(x/u)^2 */
+ expx = MPFR_GET_EXP (xp);
+ log2u = u == 1 ? 0 : MPFR_INT_CEIL_LOG2 (u) - 1;
+ /* u >= 2^log2u thus 1/u <= 2^(-log2u) */
+ erra = -2 * expx;
+ errb = 5 - 2 * log2u;
+ /* The 3rd argument (err1) of MPFR_SMALL_INPUT_AFTER_SAVE_EXPO should be
+ erra - errb, but it may overflow. The negative overflow is avoided by
+ the test erra > errb: if erra - errb <= 0, the macro is no-op.
+ Saturate to MPFR_EXP_MAX in case of positive overflow, as the error
+ test in MPFR_SMALL_INPUT_AFTER_SAVE_EXPO will always be true for
+ any value >= MPFR_PREC_MAX + 1, and this includes MPFR_EXP_MAX (from
+ the definition of MPFR_PREC_MAX and mpfr_exp_t >= mpfr_prec_t). */
+ if (erra > errb)
+ {
+ mpfr_exp_t err1 = errb >= 0 || erra < MPFR_EXP_MAX + errb ?
+ erra - errb : MPFR_EXP_MAX;
+ MPFR_SMALL_INPUT_AFTER_SAVE_EXPO (y, __gmpfr_one, err1, 0, 0,
+ rnd_mode, expo, CLEAR_XR);
+ }
+
+ precy = MPFR_GET_PREC (y);
+ /* For x large, since argument reduction is expensive, we want to avoid
+ any failure in Ziv's strategy, thus we take into account expx too. */
+ prec = precy + MAX(expx,MPFR_INT_CEIL_LOG2 (precy)) + 8;
+ MPFR_ASSERTD(prec >= 2);
+ mpfr_init2 (t, prec);
+ MPFR_ZIV_INIT (loop, prec);
+ for (;;)
+ {
+ nloops ++;
+ /* In the error analysis below, xp stands for x.
+ We first compute an approximation t of 2*pi*x/u, then call cos(t).
+ If t = 2*pi*x/u + s, then |cos(t) - cos(2*pi*x/u)| <= |s|. */
+ mpfr_set_prec (t, prec);
+ mpfr_const_pi (t, MPFR_RNDN); /* t = pi * (1 + theta1) where
+ |theta1| <= 2^-prec */
+ mpfr_mul_2ui (t, t, 1, MPFR_RNDN); /* t = 2*pi * (1 + theta1) */
+ mpfr_mul (t, t, xp, MPFR_RNDN); /* t = 2*pi*x * (1 + theta2)^2 where
+ |theta2| <= 2^-prec */
+ mpfr_div_ui (t, t, u, MPFR_RNDN); /* t = 2*pi*x/u * (1 + theta3)^3 where
+ |theta3| <= 2^-prec */
+ /* if t is zero here, it means the division by u underflowd */
+ if (MPFR_UNLIKELY (MPFR_IS_ZERO (t)))
+ {
+ mpfr_set_ui (y, 1, MPFR_RNDZ);
+ if (MPFR_IS_LIKE_RNDZ(rnd_mode,0))
+ {
+ inexact = -1;
+ mpfr_nextbelow (y);
+ }
+ else
+ inexact = 1;
+ goto end;
+ }
+ /* since prec >= 2, |(1 + theta3)^3 - 1| <= 4*theta3 <= 2^(2-prec) */
+ expt = MPFR_GET_EXP (t);
+ /* we have |s| <= 2^(expt + 2 - prec) */
+ mpfr_cos (t, t, MPFR_RNDN);
+ err = expt + 2 - prec;
+ expt = MPFR_GET_EXP (t); /* new exponent of t */
+ /* the total error is at most 2^err + ulp(t)/2 = 2^err + 2^(expt-prec-1)
+ thus if err <= expt-prec-1, it is bounded by 2^(expt-prec),
+ otherwise it is bounded by 2^(err+1). */
+ err = (err <= expt - prec - 1) ? expt - prec : err + 1;
+ /* normalize err for mpfr_can_round */
+ err = expt - err;
+ if (MPFR_CAN_ROUND (t, err, precy, rnd_mode))
+ break;
+ /* Check exact cases only after the first level of Ziv' strategy, to
+ avoid slowing down the average case. Exact cases are:
+ (a) 2*pi*x/u is a multiple of pi/2, i.e., x/u is a multiple of 1/4
+ (b) 2*pi*x/u is {pi/3,2pi/3,4pi/3,5pi/3} mod 2pi */
+ if (nloops == 1)
+ {
+ /* detect case (a) */
+ inexact = mpfr_div_ui (t, xp, u, MPFR_RNDZ);
+ mpfr_mul_2ui (t, t, 2, MPFR_RNDZ);
+ if (inexact == 0 && mpfr_integer_p (t))
+ {
+ if (mpfr_odd_p (t))
+ /* t is odd: we have kpi+pi/2, thus cosu = 0,
+ for the sign, we always return +0, following IEEE 754-2019:
+ cosPi(n + 1/2) is +0 for any integer n when n + 1/2 is
+ representable. */
+ mpfr_set_zero (y, +1);
+ else /* t is even: case kpi */
+ {
+ mpfr_div_2ui (t, t, 1, MPFR_RNDZ);
+ if (!mpfr_odd_p (t))
+ /* case 2kpi: cosu = 1 */
+ mpfr_set_ui (y, 1, MPFR_RNDZ);
+ else
+ mpfr_set_si (y, -1, MPFR_RNDZ);
+ }
+ goto end;
+ }
+ /* detect case (b): this can only occur if u is divisible by 3 */
+ if ((u % 3) == 0)
+ {
+ inexact = mpfr_div_ui (t, xp, u / 3, MPFR_RNDZ);
+ /* t should be in {1/2,2/2,4/2,5/2} */
+ mpfr_mul_2ui (t, t, 1, MPFR_RNDZ);
+ /* t should be {1,2,4,5} mod 6:
+ t = 1 mod 6: case pi/3: return 1/2
+ t = 2 mod 6: case 2pi/3: return -1/2
+ t = 4 mod 6: case 4pi/3: return -1/2
+ t = 5 mod 6: case 5pi/3: return 1/2 */
+ if (inexact == 0 && mpfr_integer_p (t))
+ {
+ mpz_t z;
+ unsigned long mod6;
+ mpz_init (z);
+ inexact = mpfr_get_z (z, t, MPFR_RNDZ);
+ MPFR_ASSERTN(inexact == 0);
+ mod6 = mpz_fdiv_ui (z, 6);
+ mpz_clear (z);
+ if (mod6 == 1 || mod6 == 5)
+ {
+ mpfr_set_ui_2exp (y, 1, -1, MPFR_RNDZ);
+ goto end;
+ }
+ else /* we cannot have mod6 = 0 or 3 since those
+ case belong to (a) */
+ {
+ MPFR_ASSERTD(mod6 == 2 || mod6 == 4);
+ mpfr_set_si_2exp (y, -1, -1, MPFR_RNDZ);
+ goto end;
+ }
+ }
+ }
+ }
+ MPFR_ZIV_NEXT (loop, prec);
+ }
+ MPFR_ZIV_FREE (loop);
+
+ inexact = mpfr_set (y, t, rnd_mode);
+
+ end:
+ mpfr_clear (t);
+ CLEAR_XR;
+ MPFR_SAVE_EXPO_FREE (expo);
+ return underflow ? inexact : mpfr_check_range (y, inexact, rnd_mode);
+}
+
+int
+mpfr_cospi (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ return mpfr_cosu (y, x, 2, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/cot.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/cot.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/cot.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_cot - cotangent function.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/coth.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/coth.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/coth.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_coth - Hyperbolic cotangent function.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/csc.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/csc.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/csc.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_csc - cosecant function.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/csch.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/csch.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/csch.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_csch - Hyperbolic cosecant function.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/d_div.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/d_div.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/d_div.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_d_div -- divide a machine double precision float
by a multiple precision floating-point number
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -32,8 +32,8 @@
MPFR_SAVE_EXPO_DECL (expo);
MPFR_LOG_FUNC (
- ("b=%.20g c[%Pu]=%*.Rg rnd=%d", b, mpfr_get_prec (c), mpfr_log_prec, c, rnd_mode),
- ("a[%Pu]=%*.Rg", mpfr_get_prec (a), mpfr_log_prec, a));
+ ("b=%.20g c[%Pu]=%.*Rg rnd=%d", b, mpfr_get_prec (c), mpfr_log_prec, c, rnd_mode),
+ ("a[%Pu]=%.*Rg", mpfr_get_prec (a), mpfr_log_prec, a));
MPFR_SAVE_EXPO_MARK (expo);
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/d_sub.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/d_sub.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/d_sub.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_d_sub -- subtract a multiple precision floating-point number
from a machine double precision float
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -32,8 +32,8 @@
MPFR_SAVE_EXPO_DECL (expo);
MPFR_LOG_FUNC (
- ("b=%.20g c[%Pu]=%*.Rg rnd=%d", b, mpfr_get_prec (c), mpfr_log_prec, c, rnd_mode),
- ("a[%Pu]=%*.Rg", mpfr_get_prec (a), mpfr_log_prec, a));
+ ("b=%.20g c[%Pu]=%.*Rg rnd=%d", b, mpfr_get_prec (c), mpfr_log_prec, c, rnd_mode),
+ ("a[%Pu]=%.*Rg", mpfr_get_prec (a), mpfr_log_prec, a));
MPFR_SAVE_EXPO_MARK (expo);
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/digamma.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/digamma.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/digamma.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_digamma -- digamma function of a floating-point number
-Copyright 2009-2022 Free Software Foundation, Inc.
+Copyright 2009-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/dim.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/dim.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/dim.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_dim -- positive difference
-Copyright 2001-2002, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2001-2002, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/div.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/div.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/div.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_div -- divide two floating-point numbers
-Copyright 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/div_2exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/div_2exp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/div_2exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_div_2exp -- divide a floating-point number by a power of two
-Copyright 1999, 2001, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/div_2si.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/div_2si.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/div_2si.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_div_2si -- divide a floating-point number by a power of two
-Copyright 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/div_2ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/div_2ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/div_2ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_div_2ui -- divide a floating-point number by a power of two
-Copyright 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/div_d.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/div_d.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/div_d.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_div_d -- divide a multiple precision floating-point number
by a machine double precision float
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/div_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/div_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/div_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_div_ui -- divide a floating-point number by a machine integer
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/dot.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/dot.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/dot.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_dot -- dot product of two array of numbers
-Copyright 2018-2022 Free Software Foundation, Inc.
+Copyright 2018-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/dump.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/dump.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/dump.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_dump, mpfr_fdump -- dump a float (for the tests and debugging purpose)
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/eint.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/eint.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/eint.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_eint, mpfr_eint1 -- the exponential integral
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/eq.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/eq.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/eq.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_eq -- Compare two floats up to a specified bit #.
-Copyright 1999, 2001, 2003-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001, 2003-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/erandom.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/erandom.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/erandom.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -2,7 +2,7 @@
mean 1 and round it to the precision of rop according to the given rounding
mode.
-Copyright 2013-2022 Free Software Foundation, Inc.
+Copyright 2013-2023 Free Software Foundation, Inc.
Contributed by Charles Karney <charles at karney.com>, SRI International.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/erf.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/erf.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/erf.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_erf -- error function of a floating-point number
-Copyright 2001, 2003-2022 Free Software Foundation, Inc.
+Copyright 2001, 2003-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -97,7 +97,7 @@
inex = mpfr_prec_round (l, MPFR_PREC(y), rnd_mode);
inex2 = mpfr_prec_round (h, MPFR_PREC(y), rnd_mode);
/* Caution: we also need inex=inex2 (inex might be 0). */
- ok = SAME_SIGN (inex, inex2) && mpfr_cmp (l, h) == 0;
+ ok = SAME_SIGN (inex, inex2) && mpfr_equal_p (l, h);
if (ok)
mpfr_set (y, h, rnd_mode);
mpfr_clear (l);
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/erfc.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/erfc.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/erfc.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_erfc -- The Complementary Error Function of a floating-point number
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/exceptions.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/exceptions.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/exceptions.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Exception flags and utilities. Constructors and destructors (debug).
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -252,6 +252,9 @@
/* Note: It is possible that for pure FP numbers, EXP(x) < MPFR_EMIN_MIN,
but the caller must make sure that the difference remains small enough
to avoid reaching the special exponent values. */
+/* This function does not have logging messages. As it is also partly
+ implemented as a macro, if messages are added in the future, the macro
+ may need to be disabled when logging is enabled. */
int
mpfr_check_range (mpfr_ptr x, int t, mpfr_rnd_t rnd_mode)
{
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/exp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_exp -- exponential of a floating-point number
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/exp10.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/exp10.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/exp10.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_exp10 -- power of 10 function 10^y
-Copyright 2003-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/exp10m1.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/exp10m1.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/exp10m1.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,179 @@
+/* mpfr_exp10m1 -- Compute 10^x-1
+
+Copyright 2001-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#include "mpfr-impl.h"
+
+/* The computation of exp10m1 is done by expm1(x) = 10^x-1 */
+
+/* In case x is small in absolute value, 10^x - 1 ~ x*log(10).
+ If this is enough to deduce correct rounding, put in the auxiliary variable
+ t the approximation that will be rounded to get y, and return non-zero.
+ If we put 0 in t, it means underflow.
+ Otherwise return 0. */
+static int
+mpfr_exp10m1_small (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode,
+ mpfr_ptr t)
+{
+ mpfr_prec_t prec;
+ mpfr_exp_t e;
+
+ /* for |x| < 0.25, we have |10^x-1-x*log(10)| < 4*x^2 */
+ if (MPFR_EXP(x) > -2)
+ return 0;
+ /* now EXP(x) <= -2, thus x < 0.25 */
+ prec = MPFR_PREC(t);
+ mpfr_log_ui (t, 10, MPFR_RNDN);
+ /* t = log(10)*(1 + theta) with |theta| <= 2^(-prec) */
+ mpfr_mul (t, t, x, MPFR_RNDN);
+ /* no underflow can occur, since log(10) > 1 */
+ /* t = x*log(10)*(1 + theta)^2 with |theta| <= 2^(-prec) */
+ /* |t - x*log(10)| <= ((1 + theta)^2 - 1) * |t| <= 3*2^(-prec)*|t| */
+ /* |t - x*log(10)| < 3*2^(EXP(t)-prec) */
+ e = 2 * MPFR_GET_EXP (x) + 2 + prec - MPFR_GET_EXP(t);
+ /* |4*x^2| < 2^e*2^(EXP(t)-prec) thus
+ |t - exp10m1(x)| < (3+2^e)*2^(EXP(t)-prec) */
+ e = (e <= 1) ? 2 + (e == 1) : e + 1;
+ /* now |t - exp10m1(x)| < 2^e*2^(EXP(t)-prec) */
+ return MPFR_CAN_ROUND (t, prec - e, MPFR_PREC(y), rnd_mode);
+}
+
+int
+mpfr_exp10m1 (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ int inexact, nloop;
+ mpfr_t t;
+ mpfr_prec_t Ny = MPFR_PREC(y); /* target precision */
+ mpfr_prec_t Nt; /* working precision */
+ mpfr_exp_t err, exp_te; /* error */
+ MPFR_ZIV_DECL (loop);
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ MPFR_LOG_FUNC
+ (("x[%Pu]=%.*Rg rnd=%d", mpfr_get_prec (x), mpfr_log_prec, x, rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ inexact));
+
+ if (MPFR_IS_SINGULAR (x))
+ return mpfr_expm1 (y, x, rnd_mode); /* singular cases are identical */
+
+ MPFR_ASSERTN(!MPFR_IS_ZERO(x));
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ /* Check case where result is -1 or nextabove(-1) because x is a huge
+ negative number. */
+ if (MPFR_IS_NEG(x) && mpfr_cmpabs_ui (x, 2 + (MPFR_PREC(y) - 1) / 3) > 0)
+ {
+ MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, MPFR_FLAGS_INEXACT);
+ /* 1/2*ulp(-1) = 2^(-PREC(y)):
+ since |x| >= PREC(y)/3 + 1, then 3*|x| >= PREC(y) + 3,
+ thus 10^x < 8^x <= 2^(-PREC(y)-3) <= 1/2*ulp(-1), thus the
+ result is -1 for RNDA,RNDD,RNDN, and nextabove(-1) for RNDZ,RNDU */
+ mpfr_set_si (y, -1, MPFR_RNDZ);
+ if (!MPFR_IS_LIKE_RNDZ(rnd_mode,1))
+ inexact = -1;
+ else
+ {
+ mpfr_nextabove (y);
+ inexact = 1;
+ }
+ goto end;
+ }
+
+ Nt = Ny + MPFR_INT_CEIL_LOG2 (Ny) + 6;
+
+ mpfr_init2 (t, Nt);
+
+ MPFR_ZIV_INIT (loop, Nt);
+ for (nloop = 0;; nloop++)
+ {
+ int inex1;
+
+ MPFR_BLOCK_DECL (flags);
+
+ /* 10^x may overflow and underflow */
+ MPFR_BLOCK (flags, inex1 = mpfr_exp10 (t, x, MPFR_RNDN));
+
+ if (MPFR_OVERFLOW (flags)) /* overflow case */
+ {
+ inexact = mpfr_overflow (y, rnd_mode, MPFR_SIGN_POS);
+ MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, MPFR_FLAGS_OVERFLOW);
+ goto clear;
+ }
+
+ /* integer case */
+ if (inex1 == 0)
+ {
+ inexact = mpfr_sub_ui (y, t, 1, rnd_mode);
+ goto clear;
+ }
+
+ /* The case of underflow in 10^x (huge negative x)
+ was already detected before Ziv's loop. */
+ MPFR_ASSERTD(!MPFR_UNDERFLOW (flags));
+
+ MPFR_ASSERTN(!MPFR_IS_ZERO(t));
+ exp_te = MPFR_GET_EXP (t);
+ mpfr_sub_ui (t, t, 1, MPFR_RNDN); /* 10^x-1 */
+
+ /* error estimate */
+ /* err = __gmpfr_ceil_log2(1+pow(2,MPFR_EXP(te)-MPFR_EXP(t))) */
+ if (!MPFR_IS_ZERO(t))
+ {
+ err = MAX (exp_te - MPFR_GET_EXP (t), 0) + 1;
+ /* if inex1=0, this means that t=o(10^x) is exact, thus the correct
+ rounding is simply o(t-1) */
+ if (inex1 == 0 ||
+ MPFR_LIKELY (MPFR_CAN_ROUND (t, Nt - err, Ny, rnd_mode)))
+ break;
+ }
+
+ /* check small case: we need to do it at each step of Ziv's loop,
+ since the multiplication x*log(10) might not enable correct
+ rounding at the first loop */
+ if (mpfr_exp10m1_small (y, x, rnd_mode, t))
+ {
+ if (MPFR_IS_ZERO(t)) /* underflow */
+ {
+ mpfr_clear (t);
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_underflow (y, (rnd_mode == MPFR_RNDN) ? MPFR_RNDZ
+ : rnd_mode, 1);
+ }
+ break;
+ }
+
+ /* increase the precision */
+ MPFR_ZIV_NEXT (loop, Nt);
+ mpfr_set_prec (t, Nt);
+ }
+
+ inexact = mpfr_set (y, t, rnd_mode);
+ clear:
+ MPFR_ZIV_FREE (loop);
+ mpfr_clear (t);
+
+ end:
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_check_range (y, inexact, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/exp2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/exp2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/exp2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_exp2 -- power of 2 function 2^y
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -23,6 +23,23 @@
#define MPFR_NEED_LONGLONG_H
#include "mpfr-impl.h"
+/* TODO: mpfr_get_exp_t is called 3 times, with 3 different directed
+ rounding modes. One could reduce it to only one call thanks to the
+ inexact flag, but is it worth? */
+
+/* Convert x to an mpfr_eexp_t integer, with saturation at the minimum
+ and maximum values. Flags are unchanged. */
+static mpfr_eexp_t
+round_to_eexp_t (mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ mpfr_flags_t flags = __gmpfr_flags;
+ mpfr_eexp_t e;
+
+ e = mpfr_get_exp_t (x, rnd_mode);
+ __gmpfr_flags = flags;
+ return e;
+}
+
/* The computation of y = 2^z is done by *
* y = exp(z*log(2)). The result is exact iff z is an integer. */
@@ -29,8 +46,8 @@
int
mpfr_exp2 (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
{
- int inexact, inex2;
- long xint;
+ int inexact;
+ mpfr_eexp_t xint; /* note: will fit in mpfr_exp_t */
mpfr_t xfrac;
MPFR_SAVE_EXPO_DECL (expo);
@@ -68,12 +85,10 @@
might round to 2^(emin - 1) for rounding away or to nearest, and there
might be no underflow, since we consider underflow "after rounding". */
- MPFR_STAT_STATIC_ASSERT (MPFR_EMIN_MIN >= LONG_MIN + 2);
- if (MPFR_UNLIKELY (mpfr_cmp_si (x, __gmpfr_emin - 2) <= 0))
+ if (MPFR_UNLIKELY (round_to_eexp_t (x, MPFR_RNDU) <= __gmpfr_emin - 2))
return mpfr_underflow (y, rnd_mode == MPFR_RNDN ? MPFR_RNDZ : rnd_mode, 1);
- MPFR_STAT_STATIC_ASSERT (MPFR_EMAX_MAX <= LONG_MAX);
- if (MPFR_UNLIKELY (mpfr_cmp_si (x, __gmpfr_emax) >= 0))
+ if (MPFR_UNLIKELY (round_to_eexp_t (x, MPFR_RNDD) >= __gmpfr_emax))
return mpfr_overflow (y, rnd_mode, 1);
/* We now know that emin - 2 < x < emax. Note that an underflow or
@@ -87,9 +102,11 @@
MPFR_SMALL_INPUT_AFTER_SAVE_EXPO (y, __gmpfr_one, - MPFR_GET_EXP (x), 0,
MPFR_IS_POS (x), rnd_mode, expo, {});
- xint = mpfr_get_si (x, MPFR_RNDZ);
+ xint = mpfr_get_exp_t (x, MPFR_RNDZ);
+ MPFR_ASSERTD (__gmpfr_emin - 2 < xint && xint < __gmpfr_emax);
+
mpfr_init2 (xfrac, MPFR_PREC (x));
- MPFR_DBGRES (inexact = mpfr_sub_si (xfrac, x, xint, MPFR_RNDN));
+ MPFR_DBGRES (inexact = mpfr_frac (xfrac, x, MPFR_RNDN));
MPFR_ASSERTD (inexact == 0);
if (MPFR_IS_ZERO (xfrac))
@@ -156,11 +173,10 @@
}
else
{
- MPFR_CLEAR_FLAGS ();
- inex2 = mpfr_mul_2si (y, y, xint, rnd_mode);
- if (inex2 != 0) /* underflow or overflow */
- inexact = inex2;
- MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, __gmpfr_flags);
+ /* The following is OK due to early overflow/underflow checking.
+ the exponent may be slightly out-of-range, but this will be
+ handled by mpfr_check_range. */
+ MPFR_EXP (y) += xint;
}
MPFR_SAVE_EXPO_FREE (expo);
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/exp2m1.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/exp2m1.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/exp2m1.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,185 @@
+/* mpfr_exp2m1 -- Compute 2^x-1
+
+Copyright 2001-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#include "mpfr-impl.h"
+
+/* The computation of exp2m1 is done by expm1(x) = 2^x-1 */
+
+/* In case x is small in absolute value, 2^x - 1 ~ x*log(2).
+ If this is enough to deduce correct rounding, put in the auxiliary variable
+ t the approximation that will be rounded to get y, and return non-zero.
+ If we put 0 in t, it means underflow.
+ Otherwise return 0. */
+static int
+mpfr_exp2m1_small (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode, mpfr_ptr t)
+{
+ mpfr_prec_t prec;
+ mpfr_exp_t e;
+ MPFR_BLOCK_DECL (flags);
+
+ /* for |x| < 0.125, we have |2^x-1-x*log(2)| < x^2/4 */
+ if (MPFR_EXP(x) > -3)
+ return 0;
+ /* now EXP(x) <= -3, thus x < 0.125 */
+ prec = MPFR_PREC(t);
+ mpfr_const_log2 (t, MPFR_RNDN);
+ /* t = log(2)*(1 + theta) with |theta| <= 2^(-prec) */
+ MPFR_BLOCK (flags, mpfr_mul (t, t, x, MPFR_RNDN));
+ /* If an underflow occurs in log(2)*x, then return underflow. */
+ if (MPFR_UNDERFLOW (flags))
+ {
+ MPFR_SET_ZERO (t);
+ return 1;
+ }
+ /* t = x*log(2)*(1 + theta)^2 with |theta| <= 2^(-prec) */
+ /* |t - x*log(2)| <= ((1 + theta)^2 - 1) * |t| <= 3*2^(-prec)*|t| */
+ /* |t - x*log(2)| < 3*2^(EXP(t)-prec) */
+ e = 2 * MPFR_GET_EXP (x) - 2 + prec - MPFR_GET_EXP(t);
+ /* |x^2/4| < 2^e*2^(EXP(t)-prec) thus
+ |t - exp2m1(x)| < (3+2^e)*2^(EXP(t)-prec) */
+ e = (e <= 1) ? 2 + (e == 1) : e + 1;
+ /* now |t - exp2m1(x)| < 2^e*2^(EXP(t)-prec) */
+ return MPFR_CAN_ROUND (t, prec - e, MPFR_PREC(y), rnd_mode);
+}
+
+int
+mpfr_exp2m1 (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ int inexact, nloop;
+ mpfr_t t;
+ mpfr_prec_t Ny = MPFR_PREC(y); /* target precision */
+ mpfr_prec_t Nt; /* working precision */
+ mpfr_exp_t err, exp_te; /* error */
+ MPFR_ZIV_DECL (loop);
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ MPFR_LOG_FUNC
+ (("x[%Pu]=%.*Rg rnd=%d", mpfr_get_prec (x), mpfr_log_prec, x, rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ inexact));
+
+ if (MPFR_IS_SINGULAR (x))
+ return mpfr_expm1 (y, x, rnd_mode); /* singular cases are identical */
+
+ MPFR_ASSERTN(!MPFR_IS_ZERO(x));
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ /* Check case where result is -1 or nextabove(-1) because x is a huge
+ negative number. */
+ if (MPFR_IS_NEG(x) && mpfr_cmpabs_ui (x, MPFR_PREC(y) + 1) > 0)
+ {
+ MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, MPFR_FLAGS_INEXACT);
+ /* 1/2*ulp(-1) = 2^(-PREC(y)) thus 2^x < 1/4*ulp(-1):
+ result is -1 for RNDA,RNDD,RNDN, and nextabove(-1) for RNDZ,RNDU */
+ mpfr_set_si (y, -1, MPFR_RNDZ);
+ if (!MPFR_IS_LIKE_RNDZ(rnd_mode,1))
+ inexact = -1;
+ else
+ {
+ mpfr_nextabove (y);
+ inexact = 1;
+ }
+ goto end;
+ }
+
+ /* compute the precision of intermediary variable */
+ /* the optimal number of bits : see algorithms.tex */
+ Nt = Ny + MPFR_INT_CEIL_LOG2 (Ny) + 6;
+
+ mpfr_init2 (t, Nt);
+
+ MPFR_ZIV_INIT (loop, Nt);
+ for (nloop = 0;; nloop++)
+ {
+ int inex1;
+
+ MPFR_BLOCK_DECL (flags);
+
+ /* 2^x may overflow and underflow */
+ MPFR_BLOCK (flags, inex1 = mpfr_exp2 (t, x, MPFR_RNDN));
+
+ if (MPFR_OVERFLOW (flags)) /* overflow case */
+ {
+ inexact = mpfr_overflow (y, rnd_mode, MPFR_SIGN_POS);
+ MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, MPFR_FLAGS_OVERFLOW);
+ goto clear;
+ }
+
+ /* integer case */
+ if (inex1 == 0)
+ {
+ inexact = mpfr_sub_ui (y, t, 1, rnd_mode);
+ goto clear;
+ }
+
+ /* To get an underflow in 2^x, we need 2^x < 0.5*2^MPFR_EMIN_MIN
+ thus x < MPFR_EMIN_MIN-1. But in that case (huge negative x)
+ was already detected before Ziv's loop. */
+ MPFR_ASSERTD(!MPFR_UNDERFLOW (flags));
+
+ MPFR_ASSERTN(!MPFR_IS_ZERO(t));
+ exp_te = MPFR_GET_EXP (t);
+ mpfr_sub_ui (t, t, 1, MPFR_RNDN); /* 2^x-1 */
+
+ /* error estimate */
+ /* err = __gmpfr_ceil_log2(1+pow(2,MPFR_EXP(te)-MPFR_EXP(t))) */
+ if (!MPFR_IS_ZERO(t))
+ {
+ err = MAX (exp_te - MPFR_GET_EXP (t), 0) + 1;
+ /* if inex1=0, this means that t=o(2^x) is exact, thus the correct
+ rounding is simply o(t-1) */
+ if (inex1 == 0 ||
+ MPFR_LIKELY (MPFR_CAN_ROUND (t, Nt - err, Ny, rnd_mode)))
+ break;
+ }
+
+ /* check small case: we need to do it at each step of Ziv's loop,
+ since the multiplication x*log(2) might not enable correct
+ rounding at the first loop */
+ if (mpfr_exp2m1_small (y, x, rnd_mode, t))
+ {
+ if (MPFR_IS_ZERO(t)) /* underflow */
+ {
+ mpfr_clear (t);
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_underflow (y, (rnd_mode == MPFR_RNDN) ? MPFR_RNDZ
+ : rnd_mode, 1);
+ }
+ break;
+ }
+
+ /* increase the precision */
+ MPFR_ZIV_NEXT (loop, Nt);
+ mpfr_set_prec (t, Nt);
+ }
+
+ inexact = mpfr_set (y, t, rnd_mode);
+ clear:
+ MPFR_ZIV_FREE (loop);
+ mpfr_clear (t);
+
+ end:
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_check_range (y, inexact, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/exp3.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/exp3.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/exp3.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_exp -- exponential of a floating-point number
-Copyright 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/exp_2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/exp_2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/exp_2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_exp_2 -- exponential of a floating-point number
using algorithms in O(n^(1/2)*M(n)) and O(n^(1/3)*M(n))
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/expm1.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/expm1.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/expm1.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_expm1 -- Compute exp(x)-1
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/extract.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/extract.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/extract.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_extract -- bit-extraction function for the binary splitting algorithm
-Copyright 2000-2002, 2004-2022 Free Software Foundation, Inc.
+Copyright 2000-2002, 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/factorial.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/factorial.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/factorial.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fac_ui -- factorial of a non-negative integer
-Copyright 2001, 2004-2022 Free Software Foundation, Inc.
+Copyright 2001, 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fits_intmax.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fits_intmax.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fits_intmax.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fits_intmax_p -- test whether an mpfr fits an intmax_t.
-Copyright 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -58,7 +58,7 @@
if (neg)
{
uintmax_t s;
- /* In C89, the division on negative integers isn't well-defined. */
+ /* In C90, the division on negative integers isn't well-defined. */
s = SAFE_ABS (uintmax_t, INTMAX_MIN);
for (prec = 0; s != 0; s /= 2, prec ++);
}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fits_s.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fits_s.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fits_s.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fits_*_p -- test whether an mpfr fits a C signed type.
-Copyright 2003-2022 Free Software Foundation, Inc.
+Copyright 2003-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -58,7 +58,7 @@
if (neg)
{
unsigned TYPE s;
- /* In C89, the division on negative integers isn't well-defined. */
+ /* In C90, the division on negative integers isn't well-defined. */
s = SAFE_ABS (unsigned TYPE, MINIMUM);
for (prec = 0; s != 0; s /= 2, prec ++);
}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fits_sint.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fits_sint.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fits_sint.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fits_sint_p -- test whether an mpfr fits an int.
-Copyright 2003, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fits_slong.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fits_slong.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fits_slong.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fits_slong_p -- test whether an mpfr fits a long.
-Copyright 2003, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fits_sshort.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fits_sshort.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fits_sshort.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fits_sshort_p -- test whether an mpfr fits a short.
-Copyright 2003, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fits_u.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fits_u.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fits_u.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fits_*_p -- test whether an mpfr fits a C unsigned type.
-Copyright 2003-2022 Free Software Foundation, Inc.
+Copyright 2003-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fits_uint.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fits_uint.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fits_uint.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fits_uint_p -- test whether an mpfr fits an unsigned int.
-Copyright 2003, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fits_uintmax.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fits_uintmax.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fits_uintmax.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fits_uintmax_p -- test whether an mpfr fits an uintmax_t.
-Copyright 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fits_ulong.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fits_ulong.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fits_ulong.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fits_ulong_p -- test whether an mpfr fits an unsigned long.
-Copyright 2003, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fits_ushort.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fits_ushort.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fits_ushort.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fits_ushort_p -- test whether an mpfr fits an unsigned short.
-Copyright 2003, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fma.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fma.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fma.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fma -- Floating multiply-add
-Copyright 2001-2002, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2001-2002, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -90,7 +90,8 @@
else /* necessarily z is zero here */
{
MPFR_ASSERTD(MPFR_IS_ZERO(z));
- return mpfr_mul (s, x, y, rnd_mode);
+ return (x == y) ? mpfr_sqr (s, x, rnd_mode)
+ : mpfr_mul (s, x, y, rnd_mode);
}
}
@@ -191,7 +192,10 @@
MPFR_TMP_INIT (up, u, un * GMP_NUMB_BITS, un);
up = MPFR_MANT(u);
/* multiply x*y exactly into u */
- mpn_mul_n (up, MPFR_MANT(x), MPFR_MANT(y), n);
+ if (x == y)
+ mpn_sqr (up, MPFR_MANT(x), n);
+ else
+ mpn_mul_n (up, MPFR_MANT(x), MPFR_MANT(y), n);
if (MPFR_LIMB_MSB (up[un - 1]) == 0)
{
mpn_lshift (up, up, un, 1);
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fmma.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fmma.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fmma.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fmma, mpfr_fmms -- Compute a*b +/- c*d
-Copyright 2014-2022 Free Software Foundation, Inc.
+Copyright 2014-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/fmod_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fmod_ui.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fmod_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,72 @@
+/* mpfr_fmod_ui -- modulo a machine integer
+
+Copyright 2000-2004, 2006-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#include "mpfr-impl.h"
+
+int
+mpfr_fmod_ui (mpfr_ptr r, mpfr_srcptr x, unsigned long u, mpfr_rnd_t rnd_mode)
+{
+ int inex;
+
+ MPFR_LOG_FUNC
+ (("x[%Pu]=%.*Rg u=%lu rnd=%d",
+ mpfr_get_prec(x), mpfr_log_prec, x, u, rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d",
+ mpfr_get_prec(r), mpfr_log_prec, r, inex));
+
+ if (MPFR_UNLIKELY (u != 0))
+ {
+ mpfr_t uu;
+#ifdef MPFR_LONG_WITHIN_LIMB
+ mp_limb_t up[1];
+ int cnt;
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ MPFR_TMP_INIT1 (up, uu, GMP_NUMB_BITS);
+ MPFR_ASSERTN (u == (mp_limb_t) u);
+ count_leading_zeros (cnt, (mp_limb_t) u);
+ *up = (mp_limb_t) u << cnt;
+
+ MPFR_SAVE_EXPO_MARK (expo);
+ MPFR_SET_EXP (uu, GMP_NUMB_BITS - cnt);
+ inex = mpfr_fmod (r, x, uu, rnd_mode);
+#else
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ mpfr_init2 (uu, sizeof (unsigned long) * CHAR_BIT);
+ /* Warning: u might be outside the current exponent range! */
+ MPFR_SAVE_EXPO_MARK (expo);
+ mpfr_set_ui (uu, u, MPFR_RNDZ);
+ inex = mpfr_fmod (r, x, uu, rnd_mode);
+ mpfr_clear (uu);
+#endif /* MPFR_LONG_WITHIN_LIMB */
+ MPFR_SAVE_EXPO_FREE (expo);
+ inex = mpfr_check_range (r, inex, rnd_mode);
+ return inex;
+ }
+ else
+ {
+ MPFR_SET_NAN (r);
+ MPFR_RET_NAN;
+ }
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fms.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fms.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fms.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_fms -- Floating multiply-subtract
-Copyright 2001-2002, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2001-2002, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/fpif.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/fpif.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/fpif.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_fpif -- Binary export & import of MPFR numbers
(floating-point interchange format)
-Copyright 2012-2022 Free Software Foundation, Inc.
+Copyright 2012-2023 Free Software Foundation, Inc.
Contributed by Olivier Demengeon.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/frac.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/frac.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/frac.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_frac -- Fractional part of a floating-point number.
-Copyright 2002-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2002-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/free_cache.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/free_cache.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/free_cache.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_free_cache... - Free cache/pool memory used by MPFR.
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/frexp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/frexp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/frexp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_frexp -- convert to integral and fractional parts
-Copyright 2011-2022 Free Software Foundation, Inc.
+Copyright 2011-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/gamma.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/gamma.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/gamma.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_gamma -- gamma function
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/gamma_inc.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/gamma_inc.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/gamma_inc.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_gamma_inc -- incomplete gamma function
-Copyright 2016-2022 Free Software Foundation, Inc.
+Copyright 2016-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/gammaonethird.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/gammaonethird.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/gammaonethird.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Functions for evaluating Gamma(1/3) and Gamma(2/3). Used by mpfr_ai.
-Copyright 2010-2022 Free Software Foundation, Inc.
+Copyright 2010-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/gen_inverse.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/gen_inverse.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/gen_inverse.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* generic inverse of a function.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/generic/coverage/mparam.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/generic/coverage/mparam.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/generic/coverage/mparam.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Various Thresholds of MPFR, not exported. -*- mode: C -*-
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/generic/mparam.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/generic/mparam.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/generic/mparam.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Various Thresholds of MPFR, not exported. -*- mode: C -*-
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_d.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_d.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_d.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_get_d, mpfr_get_d_2exp -- convert a multiple precision floating-point
number to a machine double precision float
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -42,7 +42,10 @@
if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (src)))
{
if (MPFR_IS_NAN (src))
- return MPFR_DBL_NAN;
+ {
+ /* we don't propagate the sign bit */
+ return MPFR_DBL_NAN;
+ }
negative = MPFR_IS_NEG (src);
@@ -148,7 +151,10 @@
int negative;
*expptr = 0;
if (MPFR_IS_NAN (src))
- return MPFR_DBL_NAN;
+ {
+ /* we don't propagate the sign bit */
+ return MPFR_DBL_NAN;
+ }
negative = MPFR_IS_NEG (src);
if (MPFR_IS_INF (src))
return negative ? MPFR_DBL_INFM : MPFR_DBL_INFP;
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_d128.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_d128.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_d128.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -3,9 +3,9 @@
See https://gcc.gnu.org/legacy-ml/gcc/2006-06/msg00691.html,
https://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html,
-and TR 24732 <http://www.open-std.org/jtc1/sc22/wg14/www/projects#24732>.
+and TR 24732 <https://www.open-std.org/jtc1/sc22/wg14/www/projects#24732>.
-Copyright 2006-2022 Free Software Foundation, Inc.
+Copyright 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -25,6 +25,23 @@
https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+/* Warning! Do not use any conversion between binary and decimal types,
+ * otherwise GCC will generate from 2 to 3 MB of code (depending on the
+ * GCC version) in the MPFR shared library when the _Decimal128 format
+ * is BID (e.g. on x86).
+ * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96173
+ * https://gforge.inria.fr/tracker/index.php?func=detail&aid=21849&group_id=136&atid=619
+ *
+ * FIXME: Try to save even more space in the MPFR library by avoiding
+ * _Decimal128 operations entirely. These operations now appear only in
+ * string_to_Decimal128(). In the case where the _Decimal128 format is
+ * recognized as BID, this function should be reimplemented directly by
+ * using the specification of the encoding of this format, as already
+ * done for _Decimal64 (see string_to_Decimal64 in get_d64.c).
+ * Or use strtod128 when available, making sure that the string is
+ * locale-independent? (Should one optionally use libdfp for that?)
+ */
+
#include "mpfr-impl.h"
#include "ieee_floats.h"
@@ -40,7 +57,7 @@
static _Decimal128
get_decimal128_nan (void)
{
- return 0.0dl / 0.0dl;
+ return 0.dl / 0.dl;
}
/* construct the decimal128 Inf with given sign */
@@ -47,7 +64,7 @@
static _Decimal128
get_decimal128_inf (int negative)
{
- return negative ? - 1.0dl / 0.0dl : 1.0dl / 0.0dl;
+ return negative ? - 1.dl / 0.dl : 1.dl / 0.dl;
}
/* construct the decimal128 zero with given sign */
@@ -54,7 +71,7 @@
static _Decimal128
get_decimal128_zero (int negative)
{
- return negative ? - 0.0dl : 0.0dl;
+ return negative ? - 0.dl : 0.dl;
}
/* construct the decimal128 smallest non-zero with given sign:
@@ -340,7 +357,10 @@
if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (src)))
{
if (MPFR_IS_NAN (src))
- return get_decimal128_nan ();
+ {
+ /* we don't propagate the sign bit */
+ return get_decimal128_nan ();
+ }
negative = MPFR_IS_NEG (src);
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_d64.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_d64.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_d64.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -3,9 +3,9 @@
See https://gcc.gnu.org/legacy-ml/gcc/2006-06/msg00691.html,
https://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html,
-and TR 24732 <http://www.open-std.org/jtc1/sc22/wg14/www/projects#24732>.
+and TR 24732 <https://www.open-std.org/jtc1/sc22/wg14/www/projects#24732>.
-Copyright 2006-2022 Free Software Foundation, Inc.
+Copyright 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -152,7 +152,7 @@
static _Decimal64
get_decimal64_zero (int negative)
{
- return negative ? -0.0dd : 0.0dd;
+ return negative ? -0.dd : 0.dd;
}
/* construct the decimal64 smallest non-zero with given sign:
@@ -513,7 +513,10 @@
if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (src)))
{
if (MPFR_IS_NAN (src))
- return get_decimal64_nan ();
+ {
+ /* we don't propagate the sign bit */
+ return get_decimal64_nan ();
+ }
negative = MPFR_IS_NEG (src);
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_exp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_get_exp - get the exponent of a floating-point number
-Copyright 2002-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2002-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_f.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_f.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_f.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_get_f -- convert a MPFR number to a GNU MPF number
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -49,8 +49,8 @@
MPFR_SET_ERANGEFLAG ();
return 0;
}
- else /* y is plus infinity (resp. minus infinity), set x to the maximum
- value (resp. the minimum value) in precision PREC(x) */
+ else /* y is +inf (resp. -inf); set x to the maximum value
+ (resp. the minimum value) in precision PREC(x) */
{
int i;
mp_limb_t *xp;
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_float128.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_float128.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_float128.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_get_float128 -- convert a multiple precision floating-point
number to a _Float128 number
-Copyright 2012-2022 Free Software Foundation, Inc.
+Copyright 2012-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_flt.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_flt.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_flt.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_get_flt -- convert a mpfr_t to a machine single precision float
-Copyright 2009-2022 Free Software Foundation, Inc.
+Copyright 2009-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -41,7 +41,10 @@
/* in case of NaN, +Inf, -Inf, +0, -0, the conversion from double to float
is exact */
if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (src)))
- return (float) mpfr_get_d (src, rnd_mode);
+ {
+ /* for NaN, we don't propagate the sign bit */
+ return (float) mpfr_get_d (src, rnd_mode);
+ }
e = MPFR_GET_EXP (src);
negative = MPFR_IS_NEG (src);
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_ld.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_ld.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_ld.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_get_ld, mpfr_get_ld_2exp -- convert a multiple precision floating-point
number to a machine long double
-Copyright 2002-2022 Free Software Foundation, Inc.
+Copyright 2002-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -207,7 +207,10 @@
to get the correct sign (assuming mpfr_get_d supports signed
zeros on the implementation). */
if (s == 0 || DOUBLE_ISNAN (s) || DOUBLE_ISINF (s))
- r = (long double) s;
+ {
+ /* we don't propagate the sign bit of NaN */
+ r = (long double) s;
+ }
else
{
mpfr_t y, z;
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_q.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_q.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_q.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_get_q -- get a multiple-precision rational from
a floating-point number
-Copyright 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_si.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_si.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_si.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_get_si -- convert a floating-point number to a signed long.
-Copyright 2003-2022 Free Software Foundation, Inc.
+Copyright 2003-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_sj.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_sj.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_sj.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_get_sj -- convert a MPFR number to a huge machine signed integer
-Copyright 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_str.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_str.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_str.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_get_str -- output a floating-point number to a string
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -2484,6 +2484,7 @@
size_t
mpfr_get_str_ndigits (int b, mpfr_prec_t p)
{
+ size_t ret;
MPFR_SAVE_EXPO_DECL (expo);
MPFR_ASSERTN (2 <= b && b <= 62);
@@ -2505,57 +2506,61 @@
1 + ceil(p*log(2)/log(b)) for p < 186564318007 (it returns one more
for p=186564318007 and b=7 or 49) */
MPFR_STAT_STATIC_ASSERT (MPFR_PREC_BITS >= 64 || MPFR_PREC_BITS <= 32);
- if
+ if (
#if MPFR_PREC_BITS >= 64
- /* 64-bit numbers are supported by the C implementation, so that we can
- use the large constant below. If MPFR_PREC_BITS <= 32, the condition
- is always satisfied, so that we do not need any test. */
- (MPFR_LIKELY (p < 186564318007))
+ /* 64-bit numbers are supported by the C implementation, so that we can
+ use the large constant below. */
+ MPFR_LIKELY (p < 186564318007)
#else
- (1)
+ /* Since MPFR_PREC_BITS <= 32, the above condition is always satisfied,
+ so that we do not need any test on p. */
+ 1
#endif
- {
- size_t ret = 1 + mpfr_ceil_mul (IS_POW2(b) ? p - 1 : p, b, 1);
- MPFR_SAVE_EXPO_FREE (expo);
- return ret;
- }
+ )
+ ret = mpfr_ceil_mul (IS_POW2(b) ? p - 1 : p, b, 1);
+ else
+ {
+ /* p is large and b is not a power of two. The code below works
+ for any value of p and b, as long as b is not a power of two.
+ Indeed, in such a case, p*log(2)/log(b) cannot be exactly an
+ integer, and thus Ziv's loop will terminate. */
+ mpfr_prec_t w = 77; /* mpfr_ceil_mul used a 77-bit upper approximation
+ to log(2)/log(b) */
- /* Now p is large and b is not a power of two. The code below works for any
- value of p and b, as long as b is not a power of two. Indeed, in such a
- case, p*log(2)/log(b) cannot be exactly an integer, and thus Ziv's loop
- will terminate. */
- {
- mpfr_prec_t w = 77; /* mpfr_ceil_mul used a 77-bit upper approximation of
- log(2)/log(b) */
- mpfr_t d, u;
- size_t ret = 0;
- while (ret == 0)
- {
- w = 2 * w;
- mpfr_init2 (d, w); /* lower approximation */
- mpfr_init2 (u, w); /* upper approximation */
- mpfr_set_ui (d, b, MPFR_RNDU);
- mpfr_set_ui (u, b, MPFR_RNDD);
- mpfr_log2 (d, d, MPFR_RNDU);
- mpfr_log2 (u, u, MPFR_RNDD);
- /* The code below requires that the precision fit in an unsigned long,
- which we currently guarantee (see _MPFR_PREC_FORMAT). */
- MPFR_STAT_STATIC_ASSERT (MPFR_PREC_MAX <= ULONG_MAX);
- /* u <= log(b)/log(2) <= d (***) */
- mpfr_ui_div (d, p, d, MPFR_RNDD);
- mpfr_ui_div (u, p, u, MPFR_RNDU);
- /* d <= p*log(2)/log(b) <= u */
- mpfr_ceil (d, d);
- mpfr_ceil (u, u);
- if (mpfr_cmp (d, u) == 0)
- ret = mpfr_get_ui (d, MPFR_RNDU);
- mpfr_clear (d);
- mpfr_clear (u);
- }
+ ret = 0;
+ while (ret == 0)
+ {
+ mpfr_t d, u;
- MPFR_SAVE_EXPO_FREE (expo);
- return 1 + ret;
- }
+ w = 2 * w;
+ mpfr_init2 (d, w); /* lower approximation */
+ mpfr_init2 (u, w); /* upper approximation */
+ mpfr_set_ui (d, b, MPFR_RNDU);
+ mpfr_set_ui (u, b, MPFR_RNDD);
+ mpfr_log2 (d, d, MPFR_RNDU);
+ mpfr_log2 (u, u, MPFR_RNDD);
+ /* The code below requires that the precision p fit in
+ an unsigned long, which we currently guarantee (see
+ _MPFR_PREC_FORMAT). */
+ MPFR_STAT_STATIC_ASSERT (MPFR_PREC_MAX <= ULONG_MAX);
+ /* u <= log(b)/log(2) <= d (***) */
+ mpfr_ui_div (d, p, d, MPFR_RNDD);
+ mpfr_ui_div (u, p, u, MPFR_RNDU);
+ /* d <= p*log(2)/log(b) <= u */
+ mpfr_ceil (d, d);
+ mpfr_ceil (u, u);
+ if (mpfr_equal_p (d, u))
+ {
+ ret = mpfr_get_ui (d, MPFR_RNDU);
+ MPFR_ASSERTD (ret != 0);
+ }
+ mpfr_clear (d);
+ mpfr_clear (u);
+ }
+ }
+
+ MPFR_SAVE_EXPO_FREE (expo);
+ return 1 + ret;
}
/* prints the mantissa of x in the string s, and writes the corresponding
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_get_ui -- convert a floating-point number to an unsigned long.
-Copyright 2003-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_uj.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_uj.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_uj.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_get_uj -- convert a MPFR number to a huge machine unsigned integer
-Copyright 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/get_z.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_z.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_z.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_get_z -- get a multiple-precision integer from
a floating-point number
-Copyright 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/get_z_2exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_z_2exp.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_z_2exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,96 @@
+/* mpfr_get_z_2exp -- get a multiple-precision integer and an exponent
+ from a floating-point number
+
+Copyright 2000-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "mpfr-impl.h"
+
+/* puts the significand of f into z, and returns 'exp' such that f = z * 2^exp
+ *
+ * 0 doesn't have an exponent, therefore the returned exponent in this case
+ * isn't really important. We choose to return __gmpfr_emin because
+ * 1) it is in the exponent range [__gmpfr_emin,__gmpfr_emax],
+ * 2) the smaller a number is (in absolute value), the smaller its
+ * exponent is. In other words, the f -> exp function is monotonous
+ * on non-negative numbers. --> This is WRONG since the returned
+ * exponent is not necessarily in the exponent range!
+ * Note that this is different from the C function frexp().
+ *
+ * For NaN and infinities, we choose to set z = 0 (neutral value).
+ * The exponent doesn't really matter, so let's keep __gmpfr_emin
+ * for consistency. The erange flag is set.
+ */
+
+/* MPFR_LARGE_EXP can be defined when mpfr_exp_t is guaranteed to have
+ at least 64 bits (in a portable way). */
+#if GMP_NUMB_BITS >= 64
+/* Now, we know that the constant below is supported by the compiler. */
+# if _MPFR_EXP_FORMAT >= 3 && LONG_MAX >= 9223372036854775807
+# define MPFR_LARGE_EXP 1
+# endif
+#endif
+
+mpfr_exp_t
+mpfr_get_z_2exp (mpz_ptr z, mpfr_srcptr f)
+{
+ mp_size_t fn;
+ int sh;
+
+ if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (f)))
+ {
+ if (MPFR_UNLIKELY (MPFR_NOTZERO (f)))
+ MPFR_SET_ERANGEFLAG ();
+ mpz_set_ui (z, 0);
+ return __gmpfr_emin;
+ }
+
+ fn = MPFR_LIMB_SIZE(f);
+
+ /* FIXME: temporary assert for security. Too large values should
+ probably be handled like infinities. */
+ MPFR_ASSERTN (fn <= INT_MAX); /* due to SIZ(z) being an int */
+
+ /* check whether allocated space for z is enough */
+ mpz_realloc2 (z, (mp_bitcnt_t) fn * GMP_NUMB_BITS);
+
+ MPFR_UNSIGNED_MINUS_MODULO (sh, MPFR_PREC (f));
+ if (MPFR_LIKELY (sh))
+ mpn_rshift (PTR (z), MPFR_MANT (f), fn, sh);
+ else
+ MPN_COPY (PTR (z), MPFR_MANT (f), fn);
+
+ SIZ(z) = MPFR_IS_NEG (f) ? -fn : fn;
+
+#ifndef MPFR_LARGE_EXP
+ /* If mpfr_exp_t has 64 bits, then MPFR_GET_EXP(f) >= MPFR_EMIN_MIN = 1-2^62
+ and MPFR_EXP_MIN <= 1-2^63, thus the following implies PREC(f) > 2^62,
+ which is impossible due to memory constraints. */
+ if (MPFR_UNLIKELY ((mpfr_uexp_t) MPFR_GET_EXP (f) - MPFR_EXP_MIN
+ < (mpfr_uexp_t) MPFR_PREC (f)))
+ {
+ /* The exponent isn't representable in an mpfr_exp_t. */
+ MPFR_SET_ERANGEFLAG ();
+ return MPFR_EXP_MIN;
+ }
+#endif
+
+ return MPFR_GET_EXP (f) - MPFR_PREC (f);
+}
Deleted: trunk/Build/source/libs/mpfr/mpfr-src/src/get_z_exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/get_z_exp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/get_z_exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,96 +0,0 @@
-/* mpfr_get_z_2exp -- get a multiple-precision integer and an exponent
- from a floating-point number
-
-Copyright 2000-2022 Free Software Foundation, Inc.
-Contributed by the AriC and Caramba projects, INRIA.
-
-This file is part of the GNU MPFR Library.
-
-The GNU MPFR Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 3 of the License, or (at your
-option) any later version.
-
-The GNU MPFR Library is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
-https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
-51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "mpfr-impl.h"
-
-/* puts the significand of f into z, and returns 'exp' such that f = z * 2^exp
- *
- * 0 doesn't have an exponent, therefore the returned exponent in this case
- * isn't really important. We choose to return __gmpfr_emin because
- * 1) it is in the exponent range [__gmpfr_emin,__gmpfr_emax],
- * 2) the smaller a number is (in absolute value), the smaller its
- * exponent is. In other words, the f -> exp function is monotonous
- * on non-negative numbers. --> This is WRONG since the returned
- * exponent is not necessarily in the exponent range!
- * Note that this is different from the C function frexp().
- *
- * For NaN and infinities, we choose to set z = 0 (neutral value).
- * The exponent doesn't really matter, so let's keep __gmpfr_emin
- * for consistency. The erange flag is set.
- */
-
-/* MPFR_LARGE_EXP can be defined when mpfr_exp_t is guaranteed to have
- at least 64 bits (in a portable way). */
-#if GMP_NUMB_BITS >= 64
-/* Now, we know that the constant below is supported by the compiler. */
-# if _MPFR_EXP_FORMAT >= 3 && LONG_MAX >= 9223372036854775807
-# define MPFR_LARGE_EXP 1
-# endif
-#endif
-
-mpfr_exp_t
-mpfr_get_z_2exp (mpz_ptr z, mpfr_srcptr f)
-{
- mp_size_t fn;
- int sh;
-
- if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (f)))
- {
- if (MPFR_UNLIKELY (MPFR_NOTZERO (f)))
- MPFR_SET_ERANGEFLAG ();
- mpz_set_ui (z, 0);
- return __gmpfr_emin;
- }
-
- fn = MPFR_LIMB_SIZE(f);
-
- /* FIXME: temporary assert for security. Too large values should
- probably be handled like infinities. */
- MPFR_ASSERTN (fn <= INT_MAX); /* due to SIZ(z) being an int */
-
- /* check whether allocated space for z is enough */
- mpz_realloc2 (z, (mp_bitcnt_t) fn * GMP_NUMB_BITS);
-
- MPFR_UNSIGNED_MINUS_MODULO (sh, MPFR_PREC (f));
- if (MPFR_LIKELY (sh))
- mpn_rshift (PTR (z), MPFR_MANT (f), fn, sh);
- else
- MPN_COPY (PTR (z), MPFR_MANT (f), fn);
-
- SIZ(z) = MPFR_IS_NEG (f) ? -fn : fn;
-
-#ifndef MPFR_LARGE_EXP
- /* If mpfr_exp_t has 64 bits, then MPFR_GET_EXP(f) >= MPFR_EMIN_MIN = 1-2^62
- and MPFR_EXP_MIN <= 1-2^63, thus the following implies PREC(f) > 2^62,
- which is impossible due to memory constraints. */
- if (MPFR_UNLIKELY ((mpfr_uexp_t) MPFR_GET_EXP (f) - MPFR_EXP_MIN
- < (mpfr_uexp_t) MPFR_PREC (f)))
- {
- /* The exponent isn't representable in an mpfr_exp_t. */
- MPFR_SET_ERANGEFLAG ();
- return MPFR_EXP_MIN;
- }
-#endif
-
- return MPFR_GET_EXP (f) - MPFR_PREC (f);
-}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/gmp_op.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/gmp_op.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/gmp_op.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Implementations of operations between mpfr and mpz/mpq data
-Copyright 2001, 2003-2022 Free Software Foundation, Inc.
+Copyright 2001, 2003-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/grandom.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/grandom.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/grandom.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -3,7 +3,7 @@
distribution and round it to the precision of rop1, rop2 according
to the given rounding mode.
-Copyright 2011-2022 Free Software Foundation, Inc.
+Copyright 2011-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/hypot.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/hypot.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/hypot.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_hypot -- Euclidean distance
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/ieee_floats.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/ieee_floats.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/ieee_floats.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* auxiliary data to generate special IEEE floats (NaN, +Inf, -Inf)
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -47,7 +47,7 @@
quiet NaN (qNaN) or a signaling NaN (sNaN). For instance, HP PA-RISC
is known to do the opposite way of the usual choice recommended in
IEEE 754-2008; see:
- http://grouper.ieee.org/groups/1788/email/msg03272.html
+ https://grouper.ieee.org/groups/1788/email/msg03272.html
Moreover, the right choice is to generate a qNaN in particular because
signaling NaNs are not supported by all compilers (note that the support
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/init.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/init.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/init.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_init -- initialize a floating-point number
-Copyright 1999, 2001-2002, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2002, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/init2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/init2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/init2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_init2 -- initialize a floating-point number with given precision
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -38,7 +38,9 @@
/* Check for mp_bits_per_limb (a global variable inside GMP library) */
MPFR_ASSERTN (mp_bits_per_limb == GMP_NUMB_BITS);
- /* Check for correct EXP NAN, ZERO & INF in both mpfr.h and mpfr-impl.h */
+ /* Check for consistent EXP MAX, NAN, ZERO & INF in
+ both mpfr.h and mpfr-impl.h */
+ MPFR_STAT_STATIC_ASSERT( __MPFR_EXP_MAX == MPFR_EXP_MAX );
MPFR_STAT_STATIC_ASSERT( __MPFR_EXP_NAN == MPFR_EXP_NAN );
MPFR_STAT_STATIC_ASSERT( __MPFR_EXP_ZERO == MPFR_EXP_ZERO );
MPFR_STAT_STATIC_ASSERT( __MPFR_EXP_INF == MPFR_EXP_INF );
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/inits.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/inits.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/inits.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_inits -- initialize several floating-point numbers
-Copyright 2003-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/inits2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/inits2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/inits2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_inits2 -- initialize several floating-point numbers with given
precision
-Copyright 2003-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/inp_str.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/inp_str.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/inp_str.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_inp_str -- input a number in base BASE from stdio stream STREAM
and store the result in ROP
-Copyright 1999, 2001-2002, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2002, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -73,6 +73,10 @@
break;
c = getc (stream);
}
+ /* FIXME: The use of ungetc has been deprecated since C99 when it
+ occurs at the beginning of a binary stream, and this may happen
+ on /dev/null. One could add a "if (c != EOF)" test, but let's
+ wait for some discussion in comp.std.c first... */
ungetc (c, stream);
if (MPFR_UNLIKELY (str_size == (size_t) -1 || str_size == 0 ||
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/int_ceil_log2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/int_ceil_log2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/int_ceil_log2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* __gmpfr_int_ceil_log2 -- Integer ceil of log2(x)
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/invert_limb.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/invert_limb.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/invert_limb.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* __gmpfr_invert_limb -- implement GMP's invert_limb (which is not in GMP API)
-Copyright 2016-2022 Free Software Foundation, Inc.
+Copyright 2016-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -26,56 +26,50 @@
/* for now, we only provide __gmpfr_invert_limb for 64-bit limb */
#if GMP_NUMB_BITS == 64
-/* umul_hi(h, x, y) puts in h the high part of x*y */
-#ifdef HAVE_MULX_U64
-#include <immintrin.h>
-#define umul_hi(h, x, y) _mulx_u64 (x, y, (unsigned long long *) &(h))
-#else
-#define umul_hi(h, x, y) \
- do { \
- mp_limb_t _l; \
- umul_ppmm (h, _l, x, y); \
- (void) _l; /* unused variable */ \
- } while (0)
-#endif
+/* for 256 <= d9 < 512, invert_limb_table[d9-256] = floor((2^19-3*2^8)/d9) */
+static const unsigned short invert_limb_table[256] =
+ { 2045, 2037, 2029, 2021, 2013, 2005, 1998, 1990,
+ 1983, 1975, 1968, 1960, 1953, 1946, 1938, 1931,
+ 1924, 1917, 1910, 1903, 1896, 1889, 1883, 1876,
+ 1869, 1863, 1856, 1849, 1843, 1836, 1830, 1824,
+ 1817, 1811, 1805, 1799, 1792, 1786, 1780, 1774,
+ 1768, 1762, 1756, 1750, 1745, 1739, 1733, 1727,
+ 1722, 1716, 1710, 1705, 1699, 1694, 1688, 1683,
+ 1677, 1672, 1667, 1661, 1656, 1651, 1646, 1641,
+ 1636, 1630, 1625, 1620, 1615, 1610, 1605, 1600,
+ 1596, 1591, 1586, 1581, 1576, 1572, 1567, 1562,
+ 1558, 1553, 1548, 1544, 1539, 1535, 1530, 1526,
+ 1521, 1517, 1513, 1508, 1504, 1500, 1495, 1491,
+ 1487, 1483, 1478, 1474, 1470, 1466, 1462, 1458,
+ 1454, 1450, 1446, 1442, 1438, 1434, 1430, 1426,
+ 1422, 1418, 1414, 1411, 1407, 1403, 1399, 1396,
+ 1392, 1388, 1384, 1381, 1377, 1374, 1370, 1366,
+ 1363, 1359, 1356, 1352, 1349, 1345, 1342, 1338,
+ 1335, 1332, 1328, 1325, 1322, 1318, 1315, 1312,
+ 1308, 1305, 1302, 1299, 1295, 1292, 1289, 1286,
+ 1283, 1280, 1276, 1273, 1270, 1267, 1264, 1261,
+ 1258, 1255, 1252, 1249, 1246, 1243, 1240, 1237,
+ 1234, 1231, 1228, 1226, 1223, 1220, 1217, 1214,
+ 1211, 1209, 1206, 1203, 1200, 1197, 1195, 1192,
+ 1189, 1187, 1184, 1181, 1179, 1176, 1173, 1171,
+ 1168, 1165, 1163, 1160, 1158, 1155, 1153, 1150,
+ 1148, 1145, 1143, 1140, 1138, 1135, 1133, 1130,
+ 1128, 1125, 1123, 1121, 1118, 1116, 1113, 1111,
+ 1109, 1106, 1104, 1102, 1099, 1097, 1095, 1092,
+ 1090, 1088, 1086, 1083, 1081, 1079, 1077, 1074,
+ 1072, 1070, 1068, 1066, 1064, 1061, 1059, 1057,
+ 1055, 1053, 1051, 1049, 1047, 1044, 1042, 1040,
+ 1038, 1036, 1034, 1032, 1030, 1028, 1026, 1024 };
-/* for 256 <= d9 < 512, invert_limb_table[d9-256] = floor((2^19-3*2^8)/d9)*2^11 */
-static const mp_limb_t invert_limb_table[256] =
- { 2045<<11, 2037<<11, 2029<<11, 2021<<11, 2013<<11, 2005<<11, 1998<<11, 1990<<11,
- 1983<<11, 1975<<11, 1968<<11, 1960<<11, 1953<<11, 1946<<11, 1938<<11, 1931<<11,
- 1924<<11, 1917<<11, 1910<<11, 1903<<11, 1896<<11, 1889<<11, 1883<<11, 1876<<11,
- 1869<<11, 1863<<11, 1856<<11, 1849<<11, 1843<<11, 1836<<11, 1830<<11, 1824<<11,
- 1817<<11, 1811<<11, 1805<<11, 1799<<11, 1792<<11, 1786<<11, 1780<<11, 1774<<11,
- 1768<<11, 1762<<11, 1756<<11, 1750<<11, 1745<<11, 1739<<11, 1733<<11, 1727<<11,
- 1722<<11, 1716<<11, 1710<<11, 1705<<11, 1699<<11, 1694<<11, 1688<<11, 1683<<11,
- 1677<<11, 1672<<11, 1667<<11, 1661<<11, 1656<<11, 1651<<11, 1646<<11, 1641<<11,
- 1636<<11, 1630<<11, 1625<<11, 1620<<11, 1615<<11, 1610<<11, 1605<<11, 1600<<11,
- 1596<<11, 1591<<11, 1586<<11, 1581<<11, 1576<<11, 1572<<11, 1567<<11, 1562<<11,
- 1558<<11, 1553<<11, 1548<<11, 1544<<11, 1539<<11, 1535<<11, 1530<<11, 1526<<11,
- 1521<<11, 1517<<11, 1513<<11, 1508<<11, 1504<<11, 1500<<11, 1495<<11, 1491<<11,
- 1487<<11, 1483<<11, 1478<<11, 1474<<11, 1470<<11, 1466<<11, 1462<<11, 1458<<11,
- 1454<<11, 1450<<11, 1446<<11, 1442<<11, 1438<<11, 1434<<11, 1430<<11, 1426<<11,
- 1422<<11, 1418<<11, 1414<<11, 1411<<11, 1407<<11, 1403<<11, 1399<<11, 1396<<11,
- 1392<<11, 1388<<11, 1384<<11, 1381<<11, 1377<<11, 1374<<11, 1370<<11, 1366<<11,
- 1363<<11, 1359<<11, 1356<<11, 1352<<11, 1349<<11, 1345<<11, 1342<<11, 1338<<11,
- 1335<<11, 1332<<11, 1328<<11, 1325<<11, 1322<<11, 1318<<11, 1315<<11, 1312<<11,
- 1308<<11, 1305<<11, 1302<<11, 1299<<11, 1295<<11, 1292<<11, 1289<<11, 1286<<11,
- 1283<<11, 1280<<11, 1276<<11, 1273<<11, 1270<<11, 1267<<11, 1264<<11, 1261<<11,
- 1258<<11, 1255<<11, 1252<<11, 1249<<11, 1246<<11, 1243<<11, 1240<<11, 1237<<11,
- 1234<<11, 1231<<11, 1228<<11, 1226<<11, 1223<<11, 1220<<11, 1217<<11, 1214<<11,
- 1211<<11, 1209<<11, 1206<<11, 1203<<11, 1200<<11, 1197<<11, 1195<<11, 1192<<11,
- 1189<<11, 1187<<11, 1184<<11, 1181<<11, 1179<<11, 1176<<11, 1173<<11, 1171<<11,
- 1168<<11, 1165<<11, 1163<<11, 1160<<11, 1158<<11, 1155<<11, 1153<<11, 1150<<11,
- 1148<<11, 1145<<11, 1143<<11, 1140<<11, 1138<<11, 1135<<11, 1133<<11, 1130<<11,
- 1128<<11, 1125<<11, 1123<<11, 1121<<11, 1118<<11, 1116<<11, 1113<<11, 1111<<11,
- 1109<<11, 1106<<11, 1104<<11, 1102<<11, 1099<<11, 1097<<11, 1095<<11, 1092<<11,
- 1090<<11, 1088<<11, 1086<<11, 1083<<11, 1081<<11, 1079<<11, 1077<<11, 1074<<11,
- 1072<<11, 1070<<11, 1068<<11, 1066<<11, 1064<<11, 1061<<11, 1059<<11, 1057<<11,
- 1055<<11, 1053<<11, 1051<<11, 1049<<11, 1047<<11, 1044<<11, 1042<<11, 1040<<11,
- 1038<<11, 1036<<11, 1034<<11, 1032<<11, 1030<<11, 1028<<11, 1026<<11, 1024<<11 };
-
-/* for 256 <= d9 < 512, invert_limb_table2[d9-256] = floor((2^19-3*2^8)/d9)^2 */
-static const mp_limb_t invert_limb_table2[256] =
+/* for 256 <= d9 < 512, invert_limb_table2[d9-256] = floor((2^19-3*2^8)/d9)^2
+ *
+ * Note: This table requires 4182025 to be representable in unsigned int,
+ * thus disallows 16-bit int, for instance. However, this code is under
+ * "#if GMP_NUMB_BITS == 64", and a system with int smaller than 32 bits
+ * should better be used with GMP_NUMB_BITS == 32 (or 16 if supported).
+ * This constraint is checked with MPFR_STAT_STATIC_ASSERT below.
+ */
+static const unsigned int invert_limb_table2[256] =
{ 4182025, 4149369, 4116841, 4084441, 4052169, 4020025, 3992004, 3960100, 3932289,
3900625, 3873024, 3841600, 3814209, 3786916, 3755844, 3728761, 3701776, 3674889,
3648100, 3621409, 3594816, 3568321, 3545689, 3519376, 3493161, 3470769, 3444736,
@@ -112,9 +106,12 @@
#define __gmpfr_invert_limb(r, d) \
do { \
mp_limb_t _d, _d0, _i, _d40, _d63, _v0, _v1, _v2, _e, _v3, _h, _l; \
+ MPFR_STAT_STATIC_ASSERT (4182025 <= UINT_MAX); \
_d = (d); \
_i = (_d >> 55) - 256; /* i = d9 - 256 */ \
- _v0 = invert_limb_table[_i]; \
+ /* the shift by 11 is for free since it is hidden in the */ \
+ /* invert_limb_table2[_i] * _d40 multiplication latency */ \
+ _v0 = (mp_limb_t) invert_limb_table[_i] << 11; \
_d40 = (_d >> 24) + 1; \
_v1 = _v0 - ((invert_limb_table2[_i] * _d40) >> 40) - 1; \
_v2 = (_v1 << 13) + \
@@ -136,9 +133,10 @@
#define __gmpfr_invert_limb_approx(r, d) \
do { \
mp_limb_t _d, _d0, _i, _d40, _d63, _v0, _v1, _v2, _e, _h; \
+ MPFR_STAT_STATIC_ASSERT (4182025 <= UINT_MAX); \
_d = (d); \
_i = (_d >> 55) - 256; /* i = d9 - 256 */ \
- _v0 = invert_limb_table[_i]; \
+ _v0 = (mp_limb_t) invert_limb_table[_i] << 11; \
_d40 = (_d >> 24) + 1; \
_v1 = _v0 - ((invert_limb_table2[_i] * _d40) >> 40) - 1; \
_v2 = (_v1 << 13) + \
@@ -153,7 +151,7 @@
#elif GMP_NUMB_BITS == 32
/* for 512 <= d10 < 1024, l[d10-512] = floor((2^24-2^14+2^9)/d10) */
-static const mp_limb_t invert_limb_table[512] =
+static const unsigned short invert_limb_table[512] =
{ 32737, 32673, 32609, 32546, 32483, 32420, 32357, 32295, 32233, 32171,
32109, 32048, 31987, 31926, 31865, 31805, 31744, 31684, 31625, 31565,
31506, 31447, 31388, 31329, 31271, 31212, 31154, 31097, 31039, 30982,
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/invsqrt_limb.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/invsqrt_limb.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/invsqrt_limb.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* __gmpfr_invsqrt_limb_approx -- reciprocal approximate square root of a limb
-Copyright 2017-2022 Free Software Foundation, Inc.
+Copyright 2017-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -29,7 +29,7 @@
/* For 257 <= d10 <= 1024, T[d10-257] = floor(sqrt(2^30/d10)).
Sage code:
T = [floor(sqrt(2^30/d10)) for d10 in [257..1024]] */
-static const mp_limb_t T[768] =
+static const unsigned short T[768] =
{ 2044, 2040, 2036, 2032, 2028, 2024, 2020, 2016, 2012, 2009, 2005,
2001, 1997, 1994, 1990, 1986, 1983, 1979, 1975, 1972, 1968, 1965, 1961,
1958, 1954, 1951, 1947, 1944, 1941, 1937, 1934, 1930, 1927, 1924, 1920,
@@ -228,19 +228,6 @@
1083206683, 1080045576, 1080045576, 1076890625, 1076890625, 1073741824,
1073741824 };
-/* umul_hi(h, x, y) puts in h the high part of x*y */
-#ifdef HAVE_MULX_U64
-#include <immintrin.h>
-#define umul_hi(h, x, y) _mulx_u64 (x, y, (unsigned long long *) &(h))
-#else
-#define umul_hi(h, x, y) \
- do { \
- mp_limb_t _l; \
- umul_ppmm (h, _l, x, y); \
- (void) _l; /* unused variable */ \
- } while (0)
-#endif
-
/* given 2^62 <= d < 2^64, put in r an approximation of
s = floor(2^96/sqrt(d)) - 2^64, with r <= s <= r + 15 */
#define __gmpfr_invsqrt_limb_approx(r, d) \
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/isinf.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/isinf.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/isinf.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_inf_p -- check for infinities
-Copyright 2000-2001, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2000-2001, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/isinteger.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/isinteger.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/isinteger.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_integer_p -- test if a mpfr variable is integer.
-Copyright 2001-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2001-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/isnan.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/isnan.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/isnan.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_nan_p -- check for NaN
-Copyright 2000-2001, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2000-2001, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/isnum.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/isnum.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/isnum.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_number_p -- check for ordinary numbers
-Copyright 2000-2002, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2000-2002, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/isqrt.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/isqrt.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/isqrt.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* __gmpfr_isqrt && __gmpfr_cuberoot -- Integer square root and cube root
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/isregular.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/isregular.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/isregular.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_regular_p -- check for regular number (neither NaN, Inf or zero)
-Copyright 2009-2022 Free Software Foundation, Inc.
+Copyright 2009-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/iszero.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/iszero.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/iszero.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_zero_p -- check for zero
-Copyright 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/jn.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/jn.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/jn.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_j0, mpfr_j1, mpfr_jn -- Bessel functions of 1st kind, integer order.
https://pubs.opengroup.org/onlinepubs/9699919799/functions/j0.html
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/jyn_asympt.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/jyn_asympt.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/jyn_asympt.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_jn_asympt, mpfr_yn_asympt -- shared code for mpfr_jn and mpfr_yn
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -290,8 +290,8 @@
}
MPFR_ZIV_FREE (loop);
- inex = (MPFR_IS_POS(z) || ((n & 1) == 0)) ? mpfr_set (res, c, r)
- : mpfr_neg (res, c, r);
+ inex = mpfr_set4 (res, c, r, MPFR_IS_POS (z) || (n & 1) == 0 ?
+ MPFR_SIGN (c) : - MPFR_SIGN (c));
mpfr_clear (c);
/* for RNDF, mpfr_set or mpfr_neg may return 0, but if we return 0, it
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/li2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/li2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/li2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_li2 -- Dilogarithm.
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/lngamma.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/lngamma.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/lngamma.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_lngamma -- lngamma function
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -284,7 +284,7 @@
case if we assume lngamma(z0) cannot be exact, the other flag
should be correct. We are conservative here and request that both
inexact flags agree. */
- ok = SAME_SIGN (inex1, inex2) && mpfr_cmp (l, h) == 0;
+ ok = SAME_SIGN (inex1, inex2) && mpfr_equal_p (l, h);
if (ok)
mpfr_set (y, h, rnd); /* exact */
mpfr_clear (l);
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/log.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/log.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/log.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_log -- natural logarithm of a floating-point number
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -121,6 +121,7 @@
MPFR_ZIV_INIT (loop, p);
for (;;)
{
+ mpfr_t scaled_a;
mpfr_exp_t m;
mpfr_exp_t cancel;
@@ -131,19 +132,18 @@
/* In standard configuration (_MPFR_EXP_FORMAT <= 3), one has
mpfr_exp_t <= long, so that the following assertion is always
- true. */
+ true. This assertion is needed for the mpfr_mul_si below. */
MPFR_ASSERTN (m >= LONG_MIN && m <= LONG_MAX);
- /* FIXME: Why 1 ulp and not 1/2 ulp? Ditto with some other ones
- below. The error concerning the AGM should be explained since
- 4/s is inexact (one needs a bound on its derivative). */
- mpfr_mul_2si (tmp2, a, m, MPFR_RNDN); /* s=a*2^m, err<=1 ulp */
- MPFR_ASSERTD (MPFR_EXP (tmp2) >= (p + 3) / 2);
+ /* FIXME: Redo the error analysis. The error concerning the AGM
+ should be explained since 4/s is inexact (one needs a bound
+ on its derivative). */
+ MPFR_ALIAS (scaled_a, a, MPFR_SIGN_POS, (p + 3) / 2); /* s=a*2^m */
/* [FIXME] and one can have the equality, even if p is even.
This means that if a is a power of 2 and p is even, then
s = (1/2) * 2^((p+2)/2) = 2^(p/2), so that the condition
s > 2^(p/2) from algorithms.tex is not satisfied. */
- mpfr_div (tmp1, __gmpfr_four, tmp2, MPFR_RNDN);/* 4/s, err<=2 ulps */
+ mpfr_div (tmp1, __gmpfr_four, scaled_a, MPFR_RNDF); /* 4/s, err<=2 ulps */
mpfr_agm (tmp2, __gmpfr_one, tmp1, MPFR_RNDN); /* AG(1,4/s),err<=3 ulps */
mpfr_mul_2ui (tmp2, tmp2, 1, MPFR_RNDN); /* 2*AG(1,4/s), err<=3 ulps */
mpfr_const_pi (tmp1, MPFR_RNDN); /* compute pi, err<=1ulp */
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/log10.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/log10.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/log10.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_log10 -- logarithm in base 10.
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -129,7 +129,7 @@
if (MPFR_IS_POS (t)
&& mpfr_integer_p (t) && mpfr_fits_ulong_p (t, MPFR_RNDN)
&& !mpfr_ui_pow_ui (tt, 10, mpfr_get_ui (t, MPFR_RNDN), MPFR_RNDN)
- && mpfr_cmp (a, tt) == 0)
+ && mpfr_equal_p (a, tt))
break;
/* actualization of the precision */
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/log10p1.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/log10p1.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/log10p1.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,210 @@
+/* mpfr_log10p1 -- Compute log10(1+x)
+
+Copyright 2001-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H /* needed for MPFR_INT_CEIL_LOG2 */
+#include "mpfr-impl.h"
+
+#define ULSIZE (sizeof (unsigned long) * CHAR_BIT)
+
+/* Return non-zero if log10(1+x) is exactly representable in infinite
+ precision, and in such case the returned value is k such that 1+x = 10^k
+ (the case k=0 cannot happen since we assume x<>0). */
+static mpfr_exp_t
+mpfr_log10p1_exact_p (mpfr_srcptr x)
+{
+ /* log10(1+x) is exactly representable when 1+x is a power of 10,
+ we thus simply compute 1+x with enough precision and check whether
+ the addition is exact. This routine is called with extended exponent
+ range, thus no need to extend it. */
+ mpfr_t t;
+ int inex, ret = 0;
+
+ MPFR_ASSERTD(!MPFR_IS_SINGULAR(x));
+ if (MPFR_IS_NEG(x) || MPFR_EXP(x) <= 3) /* x < 8 */
+ return 0;
+ mpfr_init2 (t, MPFR_PREC(x));
+ inex = mpfr_add_ui (t, x, 1, MPFR_RNDZ);
+ if (inex == 0) /* otherwise 1+x = 2^k, and cannot be a power of 10 */
+ {
+ mpfr_prec_t trailing_x = mpfr_min_prec (x);
+ mpfr_prec_t trailing_t = mpfr_min_prec (t);
+ if (trailing_x > trailing_t)
+ {
+ mpfr_prec_t k = trailing_x - trailing_t;
+ /* if 1+x = 10^k, then t has k more trailing zeros than x */
+ mpz_t z;
+ mpfr_t y;
+ mpz_init (z);
+ mpz_ui_pow_ui (z, 5, k);
+ mpfr_init2 (y, mpz_sizeinbase (z, 2));
+ mpfr_set_z_2exp (y, z, k, MPFR_RNDZ);
+ if (mpfr_equal_p (t, y))
+ ret = k;
+ mpfr_clear (y);
+ mpz_clear (z);
+ }
+ }
+ mpfr_clear (t);
+ return ret;
+}
+
+/* Deal with the case where x is small, so that log10(1+x) ~ x/log(10).
+ In case we can round correctly, put in y the correctly-rounded value,
+ and return the corresponding ternary value (which cannot be zero).
+ Otherwise return 0.
+ This routine cannot be called only once after the first failure of Ziv's
+ strategy, since it might be that it fails the first time, thus we need
+ to pass the (increasing) working precision 'prec'.
+ In case of underflow, we set y to 0, and let the caller call
+ mpfr_underflow. */
+static int
+mpfr_log10p1_small (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode,
+ mpfr_prec_t prec)
+{
+ mpfr_t t;
+ mpfr_exp_t e = MPFR_GET_EXP(x);
+ int inex;
+
+ /* for |x| < 1/2, |log10(x+1) - x/log(10)| < x^2/log(10) */
+ if (e > - (mpfr_exp_t) MPFR_PREC(y))
+ return 0; /* the term in x^2 will contribute */
+ /* now e = EXP(x) <= -PREC(y) <= -1 which ensures |x| < 1/2 */
+ mpfr_init2 (t, prec);
+ mpfr_log_ui (t, 10, MPFR_RNDN);
+ MPFR_SET_EXP (t, MPFR_GET_EXP (t) - 2);
+ /* we divide x by log(10)/4 which is smaller than 1 to avoid any underflow */
+ mpfr_div (t, x, t, MPFR_RNDN);
+ if (MPFR_GET_EXP (t) < __gmpfr_emin + 2) /* underflow case */
+ {
+ MPFR_SET_ZERO(y); /* the sign does not matter */
+ inex = 1;
+ }
+ else
+ {
+ MPFR_SET_EXP (t, MPFR_GET_EXP (t) - 2);
+ /* t = x/log(10) * (1 + theta)^2 where |theta| < 2^-prec.
+ For prec>=2, |(1 + theta)^2 - 1| < 3*theta thus the error is
+ bounded by 3 ulps. The error term in x^2 is bounded by |t*x|,
+ which is less than |t|*2^e < 2^(EXP(t)+e). */
+ e += prec;
+ /* now the error is bounded by 2^e+3 ulps */
+ e = (e >= 2) ? e + 1 : 3;
+ /* now the error is bounded by 2^e ulps */
+ if (MPFR_CAN_ROUND (t, prec - e, MPFR_PREC(y), rnd_mode))
+ inex = mpfr_set (y, t, rnd_mode);
+ else
+ inex = 0;
+ }
+ mpfr_clear (t);
+ return inex;
+}
+
+/* The computation of log10p1 is done by log10p1(x) = log1p(x)/log(2) */
+int
+mpfr_log10p1 (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ int comp, inexact, nloop;
+ mpfr_t t, lg10;
+ mpfr_prec_t Ny = MPFR_PREC(y), prec;
+ MPFR_ZIV_DECL (loop);
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ MPFR_LOG_FUNC
+ (("x[%Pu]=%.*Rg rnd=%d", mpfr_get_prec (x), mpfr_log_prec, x, rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ inexact));
+
+ if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
+ return mpfr_log1p (y, x, rnd_mode); /* same result for singular cases */
+
+ comp = mpfr_cmp_si (x, -1);
+ /* log10p1(x) is undefined for x < -1 */
+ if (MPFR_UNLIKELY(comp <= 0))
+ {
+ if (comp == 0)
+ /* x=0: log10p1(-1)=-inf (divide-by-zero exception) */
+ {
+ MPFR_SET_INF (y);
+ MPFR_SET_NEG (y);
+ MPFR_SET_DIVBY0 ();
+ MPFR_RET (0);
+ }
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ prec = Ny + MPFR_INT_CEIL_LOG2 (Ny) + 6;
+
+ mpfr_init2 (t, prec);
+ mpfr_init2 (lg10, prec);
+
+ MPFR_ZIV_INIT (loop, prec);
+ for (nloop = 0; ; nloop++)
+ {
+ mpfr_log1p (t, x, MPFR_RNDN);
+ mpfr_log_ui (lg10, 10, MPFR_RNDN);
+ mpfr_div (t, t, lg10, MPFR_RNDN);
+ /* t = log10(1+x) * (1 + theta)^3 where |theta| < 2^-prec,
+ for prec >= 2 we have |(1 + theta)^3 - 1| < 4*theta. */
+ if (MPFR_LIKELY (MPFR_CAN_ROUND (t, prec - 2, Ny, rnd_mode)))
+ break;
+
+ if (nloop == 0)
+ {
+ /* check for exact cases */
+ mpfr_exp_t k;
+
+ MPFR_LOG_MSG (("check for exact cases\n", 0));
+ k = mpfr_log10p1_exact_p (x);
+ if (k != 0) /* 1+x = 10^k */
+ {
+ inexact = mpfr_set_si (y, k, rnd_mode);
+ goto end;
+ }
+ }
+
+ /* inexact will be the non-zero ternary value if rounding could be
+ done, otherwise it is set to 0. */
+ inexact = mpfr_log10p1_small (y, x, rnd_mode, prec);
+ if (inexact)
+ goto end;
+
+ MPFR_ZIV_NEXT (loop, prec);
+ mpfr_set_prec (t, prec);
+ mpfr_set_prec (lg10, prec);
+ }
+ inexact = mpfr_set (y, t, rnd_mode);
+
+ end:
+ MPFR_ZIV_FREE (loop);
+ mpfr_clear (t);
+ mpfr_clear (lg10);
+
+ MPFR_SAVE_EXPO_FREE (expo);
+ if (MPFR_IS_ZERO(y)) /* underflow from mpfr_log10p1_small */
+ return mpfr_underflow (y, (rnd_mode == MPFR_RNDN) ? MPFR_RNDZ : rnd_mode,
+ 1);
+ else
+ return mpfr_check_range (y, inexact, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/log1p.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/log1p.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/log1p.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_log1p -- Compute log(1+x)
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -24,8 +24,8 @@
#include "mpfr-impl.h"
/* Put in y an approximation of log(1+x) for x small.
- We assume |x| < 1, in which case:
- |x/2| <= |log(1+x)| = |x - x^2/2 + x^3/3 - x^4/4 + ...| <= |x|.
+ We assume |x| < 1/2, in which case:
+ |x/2| <= |log(1+x)| <= |2x|.
Return k such that the error is bounded by 2^k*ulp(y).
*/
static int
@@ -36,7 +36,7 @@
unsigned long i;
int k;
- MPFR_ASSERTD(MPFR_GET_EXP (x) <= 0); /* ensures |x| < 1 */
+ MPFR_ASSERTD(MPFR_GET_EXP (x) <= -1); /* ensures |x| < 1/2 */
/* in the following, theta represents a value with |theta| <= 2^(1-p)
(might be a different value each time) */
@@ -202,8 +202,8 @@
variant whenever EXP(x) <= -p/log2(p). */
k = 1 + __gmpfr_int_ceil_log2 (Ny); /* the +1 avoids a division by 0
when Ny=1 */
- if (MPFR_GET_EXP (x) <= - (mpfr_exp_t) (Ny / k))
- /* this implies EXP(x) <= 0 thus x < 1 */
+ if (MPFR_GET_EXP (x) + 1 <= - (mpfr_exp_t) (Ny / k))
+ /* this implies EXP(x) <= -1 thus x < 1/2 */
err = Nt - mpfr_log1p_small (t, x);
else
{
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/log2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/log2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/log2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_log2 -- log base 2
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/log2p1.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/log2p1.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/log2p1.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,168 @@
+/* mpfr_log2p1 -- Compute log2(1+x)
+
+Copyright 2001-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H /* needed for MPFR_INT_CEIL_LOG2 */
+#include "mpfr-impl.h"
+
+#define ULSIZE (sizeof (unsigned long) * CHAR_BIT)
+
+/* return non-zero if log2(1+x) is exactly representable in infinite precision,
+ and in such case the returned value is k such that 1+x = 2^k (the case k=0
+ cannot happen since we assume x<>0) */
+static mpfr_exp_t
+mpfr_log2p1_isexact (mpfr_srcptr x)
+{
+ /* log2(1+x) is exactly representable when 1+x is a power of two,
+ we thus simply compute 1+x with 1-bit precision and check whether
+ the addition is exact. This routine is called with extended exponent
+ range, thus no need to extend it. */
+ mpfr_t t;
+ int inex;
+ mpfr_exp_t e;
+
+ mpfr_init2 (t, 1);
+ inex = mpfr_add_ui (t, x, 1, MPFR_RNDZ);
+ e = MPFR_GET_EXP (t);
+ mpfr_clear (t);
+ return inex == 0 ? e - 1 : 0;
+}
+
+/* in case x=2^k and we can decide of the correct rounding,
+ put the correctly-rounded value in y and return the corresponding
+ ternary value (which is necessarily non-zero),
+ otherwise return 0 */
+static int
+mpfr_log2p1_special (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ mpfr_exp_t expx = MPFR_GET_EXP(x);
+ mpfr_exp_t k = expx - 1, expk;
+ mpfr_prec_t prec;
+ mpfr_t t;
+ int inex;
+
+ if (k <= 0 || mpfr_cmp_si_2exp (x, 1, k) != 0)
+ return 0;
+ /* k < log2(1+x) < k + 1/x/log(2) < k + 2/x */
+ expk = MPFR_INT_CEIL_LOG2(k); /* exponent of k */
+ /* 2/x < 2^(2-EXP(x)) thus if 2-EXP(x) < expk - PREC(y) - 1,
+ we have 2/x < 1/4*ulp(k) and we can decide the correct rounding */
+ if (2 - expx >= expk - MPFR_PREC(y) - 1)
+ return 0;
+ prec = (MPFR_PREC(y) + 2 <= ULSIZE) ? ULSIZE : MPFR_PREC(y) + 2;
+ mpfr_init2 (t, prec);
+ mpfr_set_ui (t, k, MPFR_RNDZ); /* exact since prec >= ULSIZE */
+ mpfr_nextabove (t);
+ /* now k < t < k + 2/x and round(t) = round(log2(1+x)) */
+ inex = mpfr_set (y, t, rnd_mode);
+ mpfr_clear (t);
+ /* Warning: for RNDF, the mpfr_set calls above might return 0 */
+ return (rnd_mode == MPFR_RNDF) ? 1 : inex;
+}
+
+/* The computation of log2p1 is done by log2p1(x) = log1p(x)/log(2) */
+int
+mpfr_log2p1 (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ int comp, inexact, nloop;
+ mpfr_t t, lg2;
+ mpfr_prec_t Ny = MPFR_PREC(y), prec;
+ MPFR_ZIV_DECL (loop);
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ MPFR_LOG_FUNC
+ (("x[%Pu]=%.*Rg rnd=%d", mpfr_get_prec (x), mpfr_log_prec, x, rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ inexact));
+
+ if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
+ return mpfr_log1p (y, x, rnd_mode); /* same result for singular cases */
+
+ comp = mpfr_cmp_si (x, -1);
+ /* log2p1(x) is undefined for x < -1 */
+ if (MPFR_UNLIKELY(comp <= 0))
+ {
+ if (comp == 0)
+ /* x=0: log2p1(-1)=-inf (divide-by-zero exception) */
+ {
+ MPFR_SET_INF (y);
+ MPFR_SET_NEG (y);
+ MPFR_SET_DIVBY0 ();
+ MPFR_RET (0);
+ }
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ prec = Ny + MPFR_INT_CEIL_LOG2 (Ny) + 6;
+
+ mpfr_init2 (t, prec);
+ mpfr_init2 (lg2, prec);
+
+ MPFR_ZIV_INIT (loop, prec);
+ for (nloop = 0; ; nloop++)
+ {
+ mpfr_log1p (t, x, MPFR_RNDN);
+ mpfr_const_log2 (lg2, MPFR_RNDN);
+ mpfr_div (t, t, lg2, MPFR_RNDN);
+ /* t = log2(1+x) * (1 + theta)^3 where |theta| < 2^-prec,
+ for prec >= 2 we have |(1 + theta)^3 - 1| < 4*theta.
+ Note: contrary to log10p1, no underflow is possible in extended
+ exponent range, since for tiny x, |log2(1+x)| ~ |x|/log(2) >= |x|,
+ and x is representable, thus x/log(2) too. */
+ if (MPFR_LIKELY (MPFR_CAN_ROUND (t, prec - 2, Ny, rnd_mode)))
+ break;
+
+ if (nloop == 0)
+ {
+ /* check for exact cases */
+ mpfr_exp_t k;
+
+ MPFR_LOG_MSG (("check for exact cases\n", 0));
+ k = mpfr_log2p1_isexact (x);
+ if (k != 0) /* 1+x = 2^k */
+ {
+ inexact = mpfr_set_si (y, k, rnd_mode);
+ goto end;
+ }
+
+ /* if x = 2^k with huge k, Ziv's loop will fail */
+ inexact = mpfr_log2p1_special (y, x, rnd_mode);
+ if (inexact != 0)
+ goto end;
+ }
+
+ MPFR_ZIV_NEXT (loop, prec);
+ mpfr_set_prec (t, prec);
+ mpfr_set_prec (lg2, prec);
+ }
+ inexact = mpfr_set (y, t, rnd_mode);
+
+ end:
+ MPFR_ZIV_FREE (loop);
+ mpfr_clear (t);
+ mpfr_clear (lg2);
+
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_check_range (y, inexact, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/log_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/log_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/log_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_log_ui -- compute natural logarithm of an unsigned long
-Copyright 2014-2022 Free Software Foundation, Inc.
+Copyright 2014-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -146,7 +146,7 @@
Since |p| <= LONG_MAX, if n > LONG_MAX, this means that p < 0 and
-n as an unsigned long value is at most LONG_MAX, thus fits in a
long. */
- p = n > LONG_MAX ? - (long) - n : (long) n;
+ p = ULONG2LONG (n);
MPFR_TMP_MARK(marker);
w = MPFR_PREC(x) + MPFR_INT_CEIL_LOG2 (MPFR_PREC(x)) + 10;
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/logging.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/logging.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/logging.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* MPFR Logging functions.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/min_prec.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/min_prec.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/min_prec.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_min_prec -- minimal size in bits to hold the mantissa
-Copyright 2009-2022 Free Software Foundation, Inc.
+Copyright 2009-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/minmax.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/minmax.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/minmax.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_min -- min and max of x, y
-Copyright 2001, 2003-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2001, 2003-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mips/mparam.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mips/mparam.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mips/mparam.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Various Thresholds of MPFR, not exported. -*- mode: C -*-
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/modf.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/modf.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/modf.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_modf -- Integral and fractional part.
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mp_clz_tab.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mp_clz_tab.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mp_clz_tab.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -3,7 +3,7 @@
THE CONTENTS OF THIS FILE ARE FOR INTERNAL USE AND MAY CHANGE
INCOMPATIBLY OR DISAPPEAR IN A FUTURE GNU MPFR RELEASE.
-Copyright 1991, 1993-1994, 1996-1997, 2000-2001, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1991, 1993-1994, 1996-1997, 2000-2001, 2004, 2006-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
It has been copied and adapted from the GNU MP Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mparam_h.in
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mparam_h.in 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mparam_h.in 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Various Thresholds of MPFR, not exported. -*- mode: C -*-
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
@@ -29,8 +29,15 @@
#include "generic/coverage/mparam.h"
/* Note: the different macros used here are those defined by gcc,
- for example with gcc -mtune=native -dM -E -xc /dev/null */
+ for example with "gcc -mtune=native -dM -E -xc /dev/null".
+ The best parameters may depend on the local machine, not just
+ the architecture or even the target processor as accepted by
+ -mtune. Target-related options set by GCC can be obtained with
+ the "-Q --help=target --help=params" options (in addition to
+ -march=... and -mtune=...).
+ See https://gcc.gnu.org/pipermail/gcc-help/2021-September/140720.html */
+
#elif 1 /* no processor specific optimization for TeX Live */
#define MPFR_TUNE_CASE "default"
#elif (defined (__tune_core2__) || defined (__tune_nocona__)) && defined (__x86_64) /* 64-bit Core 2 or Xeon */
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpf2mpfr.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpf2mpfr.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpf2mpfr.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpf2mpfr.h -- Compatibility include file with mpf.
-Copyright 1999-2002, 2004-2022 Free Software Foundation, Inc.
+Copyright 1999-2002, 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-cvers.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-cvers.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-cvers.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Utilities for MPFR developers, not exported.
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -45,6 +45,12 @@
#define __MPFR_MAJMIN(a,i) (((a) << 8) | (i))
+/* Instead of __MPFR_MAJMIN below, we could use code like
+ (__MAJ__ + (__MIN__ >= (i)) > (a))
+ as in the patch at
+ https://sympa.inria.fr/sympa/arc/mpfr/2022-12/msg00007.html
+*/
+
#if defined(__GNUC__) && defined(__GNUC_MINOR__) && ! __MPFR_ICC(0,0,0)
# define __MPFR_GNUC(a,i) \
(__MPFR_MAJMIN(__GNUC__,__GNUC_MINOR__) >= __MPFR_MAJMIN(a,i))
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-gmp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-gmp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-gmp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_gmp -- Limited gmp-impl emulator
Modified version of the GMP files.
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-gmp.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-gmp.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-gmp.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Uniform Interface to GMP.
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -697,7 +697,7 @@
having 16-bit int's, but such implementations are not required to
support bit-fields of size > 16 anyway; if ever an implementation with
16-bit int's is found, the appropriate minimal changes could still be
- done in the future.
+ done in the future. See WG14/N2921 (5.16).
*/
#ifndef _MPFR_IEEE_FLOATS
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-impl.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-impl.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-impl.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Utilities for MPFR developers, not exported.
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -200,8 +200,10 @@
# define MPFR_COLD_FUNCTION_ATTR
#endif
-/* add MPFR_MAYBE_UNUSED after a variable declaration to avoid compiler
- warnings if it is not used */
+/* Add MPFR_MAYBE_UNUSED after a variable declaration to avoid compiler
+ warnings if it is not used.
+ TODO: To be replaced by the future maybe_unused attribute (C2x) once
+ supported. */
#if __MPFR_GNUC(3,4)
#define MPFR_MAYBE_UNUSED __attribute__ ((unused))
#else
@@ -480,7 +482,7 @@
with GCC's -Wunused-but-set-variable, in non-debug mode).
Note: WG14/N2270 proposed a maybe_unused attribute, which could
be useful to avoid MPFR_DBGRES. See:
- http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2270.pdf
+ https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2270.pdf
Note: Evaluating expr might yield side effects, but such side effects
must not change the results (except by yielding an assertion failure).
*/
@@ -1198,15 +1200,16 @@
/* We want to test this :
* (rnd == MPFR_RNDU && test) || (rnd == RNDD && !test)
- * ie it transforms RNDU or RNDD to Away or Zero according to the sign */
+ * i.e. it transforms RNDU or RNDD to away or zero according to the sign.
+ * The argument test must be 0 or 1. */
#define MPFR_IS_RNDUTEST_OR_RNDDNOTTEST(rnd, test) \
- (((rnd) + (test)) == MPFR_RNDD)
+ (MPFR_ASSERTD ((test) == 0 || (test) == 1), \
+ ((rnd) + (test)) == MPFR_RNDD)
-/* We want to test if rnd = Zero, or Away.
+/* We want to test if rnd rounds toward zero or away from zero.
'neg' is 1 if negative, and 0 if positive. */
#define MPFR_IS_LIKE_RNDZ(rnd, neg) \
((rnd) == MPFR_RNDZ || MPFR_IS_RNDUTEST_OR_RNDDNOTTEST (rnd, neg))
-
#define MPFR_IS_LIKE_RNDA(rnd, neg) \
((rnd) == MPFR_RNDA || MPFR_IS_RNDUTEST_OR_RNDDNOTTEST (rnd, (neg) == 0))
@@ -1220,7 +1223,7 @@
((rnd) == MPFR_RNDZ && MPFR_IS_POS_SIGN (sign)) || \
((rnd) == MPFR_RNDA && MPFR_IS_NEG_SIGN (sign)))
-/* Invert a rounding mode, RNDN, RNDZ and RNDA are unchanged */
+/* Invert RNDU and RNDD; the other rounding modes are unchanged. */
#define MPFR_INVERT_RND(rnd) ((rnd) == MPFR_RNDU ? MPFR_RNDD : \
(rnd) == MPFR_RNDD ? MPFR_RNDU : (rnd))
@@ -1231,7 +1234,7 @@
rnd = MPFR_RNDZ; \
} while (0)
-/* Transform RNDU and RNDD to RNDZ or RNDA according to sign,
+/* Transform RNDU and RNDD to RNDZ or RNDA according to sign;
leave the other modes unchanged.
Usage: MPFR_UPDATE2_RND_MODE (rnd_mode, MPFR_SIGN (x)) */
#define MPFR_UPDATE2_RND_MODE(rnd, sign) \
@@ -1496,19 +1499,8 @@
VAR = VAR trick (see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=36296#c3)
only with gcc as this is undefined behavior, and we don't know what other
compilers do (they may also be smarter). This self-initialization trick
- could be disabled with future gcc versions.
- However, for clang (which defines __GNUC__), this trick must not be used
- as it currently generates a warning, at least with:
- Debian clang version 3.0-6.2 (tags/RELEASE_30/final) (based on LLVM 3.0)
- __VERSION__ "4.2.1 Compatible Debian Clang 3.0 (tags/RELEASE_30/final)"
- __clang__ 1
- __clang_major__ 3
- __clang_minor__ 0
- __clang_patchlevel__ 0
- __clang_version__ "3.0 (tags/RELEASE_30/final)"
- (see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=705583 for this
- problem with clang). */
-#if defined(__GNUC__) && !defined(__clang__)
+ could be disabled with future gcc versions. */
+#if defined(__GNUC__)
# define INITIALIZED(VAR) VAR = VAR
#else
# define INITIALIZED(VAR) VAR
@@ -1624,9 +1616,13 @@
#define SAFE_ABS(type,x) ((x) >= 0 ? (type)(x) : -(type)(x))
#define SAFE_DIFF(type,x,y) (MPFR_ASSERTD((x) >= (y)), (type)(x) - (type)(y))
+#define ULONG2LONG(U) ((U) > LONG_MAX ? -1 - (long) ~(U) : (long) (U))
+
/* Check whether an integer type (after integer promotion) is signed.
- This can be determined at compilation time, but unfortunately this
- is not a constant expression, so that this cannot be used for a
+ This can be determined at compilation time, but unfortunately,
+ when used in practice, this is not a constant expression (because
+ the argument X is not a constant expression, even though the result
+ does not depend on its value), so that this cannot be used for a
static assertion. */
#define IS_SIGNED(X) ((X) * 0 - 1 < 0)
@@ -1689,6 +1685,14 @@
in practice since the sizes come from the MPFR source), so that
the value can be used in arbitrary expressions without the risk
of silently switching to unsigned arithmetic. */
+/* TODO: Make numberof() a constant expression and always use it in
+ the MPFR code instead of numberof_const(). See the tricks at
+ https://gcc.gnu.org/pipermail/gcc/2020-September/233763.html
+ "[PATCH v2] <sys/param.h>: Add nitems() and snitems() macros"
+ by Alejandro Colomar
+ but this needs to be fully tested on various platforms and with
+ various compilers and compilation options.
+ Moreover, change "long" to "ptrdiff_t", as used at the above URL? */
#undef numberof
#if 0
/* The following should work with GCC as documented in its manual,
@@ -1711,7 +1715,16 @@
/* Addition with carry (detected by GCC and other good compilers). */
#define ADD_LIMB(u,v,c) ((u) += (v), (c) = (u) < (v))
+/* umul_hi(h, x, y) puts in h the high part of x*y */
+/* MPFR_NEED_LONGLONG_H needs to be defined to use it. */
+#define umul_hi(h, x, y) \
+ do { \
+ mp_limb_t _l; \
+ umul_ppmm (h, _l, x, y); \
+ (void) _l; /* unused variable */ \
+ } while (0)
+
/******************************************************
************ Save exponent/flags macros ************
******************************************************/
@@ -1964,8 +1977,8 @@
v=1 or v=x.
y is the destination (a mpfr_t), v the value to set (a mpfr_t),
- err1+err2 with err2 <= 3 the error term (mpfr_exp_t's), dir (an int) is
- the direction of the committed error (if dir = 0, it rounds toward 0,
+ err1+err2 with 0 <= err2 <= 3 the error term (mpfr_exp_t's), dir (an int)
+ is the direction of the committed error (if dir = 0, it rounds toward 0,
if dir=1, it rounds away from 0), rnd the rounding mode.
It returns from the function a ternary value in case of success.
@@ -2180,15 +2193,17 @@
#define MPFR_LOG_VAR(x) \
LOG_PRINT (MPFR_LOG_INTERNAL_F, "%s.%d:%s[%#Pu]=%.*Rg\n", __func__, \
- __LINE__, #x, mpfr_get_prec (x), mpfr_log_prec, x)
+ (int) __LINE__, #x, mpfr_get_prec (x), mpfr_log_prec, x)
#define MPFR_LOG_MSG2(format, ...) \
- LOG_PRINT (MPFR_LOG_MSG_F, "%s.%d: "format, __func__, __LINE__, __VA_ARGS__)
+ LOG_PRINT (MPFR_LOG_MSG_F, "%s.%d: "format, __func__, (int) __LINE__, \
+ __VA_ARGS__)
#define MPFR_LOG_MSG(x) MPFR_LOG_MSG2 x
#define MPFR_LOG_BEGIN2(format, ...) \
mpfr_log_current ++; \
- LOG_PRINT (MPFR_LOG_INPUT_F, "%s:IN "format"\n", __func__, __VA_ARGS__); \
+ LOG_PRINT (MPFR_LOG_INPUT_F, "%s:IN flags=%x "format"\n", __func__, \
+ (unsigned int) __gmpfr_flags, __VA_ARGS__); \
if ((MPFR_LOG_TIME_F & mpfr_log_type) && \
(mpfr_log_current <= mpfr_log_level)) \
__gmpfr_log_time = mpfr_get_cputime ();
@@ -2199,7 +2214,8 @@
#define MPFR_LOG_END2(format, ...) \
LOG_PRINT (MPFR_LOG_TIME_F, "%s:TIM %dms\n", __mpfr_log_fname, \
mpfr_get_cputime () - __gmpfr_log_time); \
- LOG_PRINT (MPFR_LOG_OUTPUT_F, "%s:OUT "format"\n", __mpfr_log_fname, \
+ LOG_PRINT (MPFR_LOG_OUTPUT_F, "%s:OUT flags=%x "format"\n", \
+ __mpfr_log_fname, (unsigned int) __gmpfr_flags, \
__VA_ARGS__); \
mpfr_log_current --;
#define MPFR_LOG_END(x) \
@@ -2492,6 +2508,9 @@
__MPFR_DECLSPEC int mpfr_odd_p (mpfr_srcptr);
__MPFR_DECLSPEC int mpfr_nbits_ulong (unsigned long);
+#ifdef _MPFR_H_HAVE_INTMAX_T
+__MPFR_DECLSPEC int mpfr_nbits_uj (uintmax_t);
+#endif
#ifdef _MPFR_H_HAVE_VA_LIST
/* Declared only if <stdarg.h> has been included. */
@@ -2678,6 +2697,21 @@
(see changeset r13820 in the ubf2 branch). So, for the time being,
as long as the code does not break, do not change anything.
+
+ Note: The condition "use mpfr_ptr to access the usual mpfr_t members and
+ mpfr_ubf_ptr to access the additional member _mpfr_zexp" may be ignored
+ if the union type is visible within the function (see ISO C99 6.5.2.3#5
+ and 6.5.2.3#8 for the example, this implementation being very similar to
+ the valid fragment of this example), which must be the case as the union
+ is declared globally. However, this seems to be buggy in GCC:
+
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=14319
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65892
+
+ Alternatively, GCC's may_alias attribute could conditionally be used
+ on the __mpfr_ubf_struct and __mpfr_struct types (though it would be
+ much stronger than needed since only these two types may alias each
+ other).
*/
typedef struct {
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-intmax.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-intmax.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-intmax.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* MPFR internal header related to intmax_t.
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-longlong.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-longlong.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-longlong.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,14 +1,12 @@
/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
-Copyright 1991-1994, 1996, 1997, 1999-2005, 2007-2009, 2011-2022 Free Software Foundation, Inc.
+Copyright 1991-1994, 1996, 1997, 1999-2005, 2007-2009, 2011-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library and has been copied from
-GNU MP 6.2.0, with the following changes:
+GNU MP 18339:32dc4af70f95, with the following changes:
* the copyright notice (note: only LGPL 3+ is used in MPFR);
* the code declared as added for MPFR just below these comments;
- * __GMP_DECLSPEC renamed to __MPFR_DECLSPEC;
- * patch on https://gmplib.org/list-archives/gmp-bugs/2020-June/004807.html
- for arm / aarch64 / 64-bit powerpc applied.
+ * __GMP_DECLSPEC renamed to __MPFR_DECLSPEC.
The GNU MPFR Library is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
@@ -443,9 +441,17 @@
#if defined (__arm__) && (defined (__thumb2__) || !defined (__thumb__)) \
&& W_TYPE_SIZE == 32
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("adds\t%1, %4, %5\n\tadc\t%0, %2, %3" \
+ do { \
+ if (__builtin_constant_p (bl) && -(USItype)(bl) < (USItype)(bl)) \
+ __asm__ ("subs\t%1, %4, %5\n\tadc\t%0, %2, %3" \
: "=r" (sh), "=&r" (sl) \
- : "r" (ah), "rI" (bh), "%r" (al), "rI" (bl) __CLOBBER_CC)
+ : "r" (ah), "rI" (bh), \
+ "%r" (al), "rI" (-(USItype)(bl)) __CLOBBER_CC); \
+ else \
+ __asm__ ("adds\t%1, %4, %5\n\tadc\t%0, %2, %3" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" (ah), "rI" (bh), "%r" (al), "rI" (bl) __CLOBBER_CC); \
+ } while (0)
/* FIXME: Extend the immediate range for the low word by using both ADDS and
SUBS, since they set carry in the same way. We need separate definitions
for thumb and non-thumb since thumb lacks RSC. */
@@ -461,10 +467,6 @@
__asm__ ("rsbs\t%1, %5, %4\n\tsbc\t%0, %2, %3" \
: "=r" (sh), "=&r" (sl) \
: "r" (ah), "rI" (bh), "rI" (al), "r" (bl) __CLOBBER_CC); \
- else if (__builtin_constant_p (bl)) \
- __asm__ ("subs\t%1, %4, %5\n\tsbc\t%0, %2, %3" \
- : "=r" (sh), "=&r" (sl) \
- : "r" (ah), "rI" (bh), "r" (al), "rI" (bl) __CLOBBER_CC); \
else \
__asm__ ("subs\t%1, %4, %5\n\tsbc\t%0, %2, %3" \
: "=r" (sh), "=&r" (sl) \
@@ -500,14 +502,10 @@
: "=r" (sh), "=&r" (sl) \
: "rI" (ah), "r" (bh), "rI" (al), "r" (bl) __CLOBBER_CC); \
} \
- else if (__builtin_constant_p (bl)) \
+ else \
__asm__ ("subs\t%1, %4, %5\n\tsbc\t%0, %2, %3" \
: "=r" (sh), "=&r" (sl) \
: "r" (ah), "rI" (bh), "r" (al), "rI" (bl) __CLOBBER_CC); \
- else /* only bh might be a constant */ \
- __asm__ ("subs\t%1, %4, %5\n\tsbc\t%0, %2, %3" \
- : "=r" (sh), "=&r" (sl) \
- : "r" (ah), "rI" (bh), "r" (al), "rI" (bl) __CLOBBER_CC); \
} while (0)
#endif
#if defined (__ARM_ARCH_2__) || defined (__ARM_ARCH_2A__) \
@@ -560,18 +558,32 @@
#endif /* __arm__ */
#if defined (__aarch64__) && W_TYPE_SIZE == 64
-/* FIXME: Extend the immediate range for the low word by using both
- ADDS and SUBS, since they set carry in the same way. */
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
- __asm__ ("adds\t%1, %x4, %5\n\tadc\t%0, %x2, %x3" \
- : "=r" (sh), "=&r" (sl) \
- : "rZ" ((UDItype)(ah)), "rZ" ((UDItype)(bh)), \
- "%r" ((UDItype)(al)), "rI" ((UDItype)(bl)) __CLOBBER_CC)
+ do { \
+ if (__builtin_constant_p (bl) && ~(UDItype)(bl) <= (UDItype)(bl)) \
+ __asm__ ("subs\t%1, %x4, %5\n\tadc\t%0, %x2, %x3" \
+ : "=r" (sh), "=&r" (sl) \
+ : "rZ" ((UDItype)(ah)), "rZ" ((UDItype)(bh)), \
+ "%r" ((UDItype)(al)), "rI" (-(UDItype)(bl)) __CLOBBER_CC);\
+ else \
+ __asm__ ("adds\t%1, %x4, %5\n\tadc\t%0, %x2, %x3" \
+ : "=r" (sh), "=&r" (sl) \
+ : "rZ" ((UDItype)(ah)), "rZ" ((UDItype)(bh)), \
+ "%r" ((UDItype)(al)), "rI" ((UDItype)(bl)) __CLOBBER_CC);\
+ } while (0)
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
- __asm__ ("subs\t%1, %x4, %5\n\tsbc\t%0, %x2, %x3" \
- : "=r,r" (sh), "=&r,&r" (sl) \
- : "rZ,rZ" ((UDItype)(ah)), "rZ,rZ" ((UDItype)(bh)), \
- "r,Z" ((UDItype)(al)), "rI,r" ((UDItype)(bl)) __CLOBBER_CC)
+ do { \
+ if (__builtin_constant_p (bl) && ~(UDItype)(bl) <= (UDItype)(bl)) \
+ __asm__ ("adds\t%1, %x4, %5\n\tsbc\t%0, %x2, %x3" \
+ : "=r,r" (sh), "=&r,&r" (sl) \
+ : "rZ,rZ" ((UDItype)(ah)), "rZ,rZ" ((UDItype)(bh)), \
+ "r,Z" ((UDItype)(al)), "rI,r" (-(UDItype)(bl)) __CLOBBER_CC);\
+ else \
+ __asm__ ("subs\t%1, %x4, %5\n\tsbc\t%0, %x2, %x3" \
+ : "=r,r" (sh), "=&r,&r" (sl) \
+ : "rZ,rZ" ((UDItype)(ah)), "rZ,rZ" ((UDItype)(bh)), \
+ "r,Z" ((UDItype)(al)), "rI,r" ((UDItype)(bl)) __CLOBBER_CC);\
+ } while(0);
#if __GMP_GNUC_PREREQ (4,9)
#define umul_ppmm(w1, w0, u, v) \
do { \
@@ -854,6 +866,7 @@
: "0" ((UDItype)(ah)), "r" ((UDItype)(bh)), \
"1" ((UDItype)(al)), "r" ((UDItype)(bl)) __CLOBBER_CC); \
} while (0)
+#if !defined (__clang__)
#define umul_ppmm(xh, xl, m0, m1) \
do { \
union {unsigned int __attribute__ ((mode(TI))) __ll; \
@@ -875,6 +888,7 @@
: "0" (__x.__ll), "r" ((UDItype)(d))); \
(q) = __x.__i.__l; (r) = __x.__i.__h; \
} while (0)
+#endif
#if 0 /* FIXME: Enable for z10 (?) */
#define count_leading_zeros(cnt, x) \
do { \
@@ -1040,7 +1054,7 @@
&& (HAVE_HOST_CPU_haswell || HAVE_HOST_CPU_broadwell \
|| HAVE_HOST_CPU_skylake || HAVE_HOST_CPU_bd4 || HAVE_HOST_CPU_zen)
#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("mulx\t%3, %0, %1" \
+ __asm__ ("mulx\t%3, %q0, %q1" \
: "=r" (w0), "=r" (w1) \
: "%d" ((UDItype)(u)), "rm" ((UDItype)(v)))
#else
@@ -1148,6 +1162,17 @@
#endif /* i960mx */
#endif /* i960 */
+
+#if defined (__loongarch64) && W_TYPE_SIZE == 64
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ UDItype __u = (u), __v = (v); \
+ (w0) = __u * __v; \
+ (w1) = (unsigned __int128__) __u * __v >> 64; \
+ } while (0)
+#endif
+
+
#if (defined (__mc68000__) || defined (__mc68020__) || defined(mc68020) \
|| defined (__m68k__) || defined (__mc5200__) || defined (__mc5206e__) \
|| defined (__mc5307__)) && W_TYPE_SIZE == 32
@@ -1205,7 +1230,7 @@
" addx%.l %2,%0\n" \
" | End inlined umul_ppmm" \
: "=&d" (xh), "=&d" (xl), \
- "=d" (__umul_tmp1), "=&d" (__umul_tmp2) \
+ "=&d" (__umul_tmp1), "=&d" (__umul_tmp2) \
: "%2" ((USItype)(a)), "d" ((USItype)(b))); \
} while (0)
#endif /* not mc68020 */
@@ -1474,38 +1499,74 @@
"%r" ((UDItype)(al)), "rI" ((UDItype)(bl)) \
__CLOBBER_CC); \
} while (0)
+/* We use "*rI" for the constant operand here, since with just "I", gcc barfs.
+ This might seem strange, but gcc folds away the dead code late. */
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
do { \
- if (__builtin_constant_p (ah) && (ah) == 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \
- : "=r" (sh), "=&r" (sl) \
- : "r" ((UDItype)(bh)), \
- "rI" ((UDItype)(al)), "r" ((UDItype)(bl)) \
- __CLOBBER_CC); \
- else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \
- : "=r" (sh), "=&r" (sl) \
- : "r" ((UDItype)(bh)), \
- "rI" ((UDItype)(al)), "r" ((UDItype)(bl)) \
- __CLOBBER_CC); \
- else if (__builtin_constant_p (bh) && (bh) == 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \
- : "=r" (sh), "=&r" (sl) \
- : "r" ((UDItype)(ah)), \
- "rI" ((UDItype)(al)), "r" ((UDItype)(bl)) \
- __CLOBBER_CC); \
- else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \
- __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \
- : "=r" (sh), "=&r" (sl) \
- : "r" ((UDItype)(ah)), \
- "rI" ((UDItype)(al)), "r" ((UDItype)(bl)) \
- __CLOBBER_CC); \
- else \
- __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \
- : "=r" (sh), "=&r" (sl) \
- : "r" ((UDItype)(ah)), "r" ((UDItype)(bh)), \
- "rI" ((UDItype)(al)), "r" ((UDItype)(bl)) \
- __CLOBBER_CC); \
+ if (__builtin_constant_p (bl) \
+ && (bl) > -0x8000 && (bl) <= 0x8000 && (bl) != 0) { \
+ if (__builtin_constant_p (ah) && (ah) == 0) \
+ __asm__ ("addic %1,%3,%4\n\tsubfze %0,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" ((UDItype)(bh)), \
+ "r" ((UDItype)(al)), "*rI" (-((UDItype)(bl))) \
+ __CLOBBER_CC); \
+ else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \
+ __asm__ ("addic %1,%3,%4\n\tsubfme %0,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" ((UDItype)(bh)), \
+ "r" ((UDItype)(al)), "*rI" (-((UDItype)(bl))) \
+ __CLOBBER_CC); \
+ else if (__builtin_constant_p (bh) && (bh) == 0) \
+ __asm__ ("addic %1,%3,%4\n\taddme %0,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" ((UDItype)(ah)), \
+ "r" ((UDItype)(al)), "*rI" (-((UDItype)(bl))) \
+ __CLOBBER_CC); \
+ else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \
+ __asm__ ("addic %1,%3,%4\n\taddze %0,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" ((UDItype)(ah)), \
+ "r" ((UDItype)(al)), "*rI" (-((UDItype)(bl))) \
+ __CLOBBER_CC); \
+ else \
+ __asm__ ("addic %1,%4,%5\n\tsubfe %0,%3,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" ((UDItype)(ah)), "r" ((UDItype)(bh)), \
+ "r" ((UDItype)(al)), "*rI" (-((UDItype)(bl))) \
+ __CLOBBER_CC); \
+ } else { \
+ if (__builtin_constant_p (ah) && (ah) == 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" ((UDItype)(bh)), \
+ "rI" ((UDItype)(al)), "r" ((UDItype)(bl)) \
+ __CLOBBER_CC); \
+ else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" ((UDItype)(bh)), \
+ "rI" ((UDItype)(al)), "r" ((UDItype)(bl)) \
+ __CLOBBER_CC); \
+ else if (__builtin_constant_p (bh) && (bh) == 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" ((UDItype)(ah)), \
+ "rI" ((UDItype)(al)), "r" ((UDItype)(bl)) \
+ __CLOBBER_CC); \
+ else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" ((UDItype)(ah)), \
+ "rI" ((UDItype)(al)), "r" ((UDItype)(bl)) \
+ __CLOBBER_CC); \
+ else \
+ __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" ((UDItype)(ah)), "r" ((UDItype)(bh)), \
+ "rI" ((UDItype)(al)), "r" ((UDItype)(bl)) \
+ __CLOBBER_CC); \
+ } \
} while (0)
#endif /* ! _LONG_LONG_LIMB */
#define count_leading_zeros(count, x) \
@@ -1608,12 +1669,12 @@
} while (0)
#endif /* RT/ROMP */
-#if defined (__riscv64) && W_TYPE_SIZE == 64
+#if defined (__riscv) && defined (__riscv_mul) && W_TYPE_SIZE == 64
#define umul_ppmm(ph, pl, u, v) \
do { \
UDItype __u = (u), __v = (v); \
(pl) = __u * __v; \
- __asm__ ("mulhu\t%2, %1, %0" : "=r" (ph) : "%r" (__u), "r" (__v)); \
+ __asm__ ("mulhu\t%0, %1, %2" : "=r" (ph) : "%r" (__u), "r" (__v)); \
} while (0)
#endif
@@ -2005,8 +2066,10 @@
#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
do { \
UWtype __x; \
- __x = (al) + (bl); \
- (sh) = (ah) + (bh) + (__x < (al)); \
+ UWtype __al = (al); \
+ UWtype __bl = (bl); \
+ __x = __al + __bl; \
+ (sh) = (ah) + (bh) + (__x < __al); \
(sl) = __x; \
} while (0)
#endif
@@ -2015,8 +2078,10 @@
#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
do { \
UWtype __x; \
- __x = (al) - (bl); \
- (sh) = (ah) - (bh) - ((al) < (bl)); \
+ UWtype __al = (al); \
+ UWtype __bl = (bl); \
+ __x = __al - __bl; \
+ (sh) = (ah) - (bh) - (__al < __bl); \
(sl) = __x; \
} while (0)
#endif
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-mini-gmp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-mini-gmp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-mini-gmp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr-mini-gmp.c -- Interface functions for mini-gmp.
-Copyright 2014-2022 Free Software Foundation, Inc.
+Copyright 2014-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-mini-gmp.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-mini-gmp.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-mini-gmp.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr-mini-gmp.h -- Interface header for mini-gmp.
-Copyright 2014-2022 Free Software Foundation, Inc.
+Copyright 2014-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-sassert.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-sassert.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-sassert.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* MPFR internal header related to Static Assertions
-Copyright 2012-2022 Free Software Foundation, Inc.
+Copyright 2012-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-thread.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-thread.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr-thread.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* MPFR internal header related to thread-local variables.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpfr.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr.h -- Include file for mpfr.
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -25,9 +25,9 @@
/* Define MPFR version number */
#define MPFR_VERSION_MAJOR 4
-#define MPFR_VERSION_MINOR 1
-#define MPFR_VERSION_PATCHLEVEL 1
-#define MPFR_VERSION_STRING "4.1.1"
+#define MPFR_VERSION_MINOR 2
+#define MPFR_VERSION_PATCHLEVEL 0
+#define MPFR_VERSION_STRING "4.2.0"
/* User macros:
MPFR_USE_FILE: Define it to make MPFR define functions dealing
@@ -162,9 +162,6 @@
typedef int mpfr_prec_t;
typedef unsigned int mpfr_uprec_t;
#elif _MPFR_PREC_FORMAT == 3
-/* we could use "long long" under Windows 64 here, which can be tested
- with the macro _WIN64 according to
- https://sourceforge.net/p/predef/wiki/OperatingSystems/ */
typedef long mpfr_prec_t;
typedef unsigned long mpfr_uprec_t;
#else
@@ -196,8 +193,19 @@
typedef unsigned long mpfr_uexp_t;
#elif _MPFR_EXP_FORMAT == 4
/* Note: in this case, intmax_t and uintmax_t must be defined before
- the inclusion of mpfr.h (we do not include <stdint.h> here because
- of some non-ISO C99 implementations that support these types). */
+ the inclusion of mpfr.h (we do not include <stdint.h> here due to
+ potential issues with non-ISO implementations, on which there are
+ alternative ways to define these types).
+ In all known implementations, intmax_t has exactly 64 bits and is
+ equivalent to long long when defined, but when long has 64 bits,
+ it may be defined as long by <stdint.h> for better portability
+ with old compilers, thus offers more flexibility than long long.
+ This may change in the future.
+ This _MPFR_EXP_FORMAT value is currently not supported since the
+ MPFR code assumes that mpfr_exp_t fits in a long. Some examples
+ of problematic code can be obtained with:
+ grep -E 'mpfr_cmp_[su]i *\(.*__gmpfr_em' *.c
+*/
typedef intmax_t mpfr_exp_t;
typedef uintmax_t mpfr_uexp_t;
#else
@@ -356,6 +364,10 @@
not __llvm__, and __declspec(deprecated("...")) can be used with
MSC as above. */
+/* ICC up to 19.1.3.304 at least declares itself as interoperable with
+ GCC 4.9, but does not support the returns_nonnull attribute, thus
+ outputs warning #1292. This minor issue has been reported in 2019-04:
+ https://community.intel.com/t5/Intel-C-Compiler/Missing-support-for-returns-nonnull-attribute/td-p/1183013 */
#if defined(__GNUC__) && \
(__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9))
# define MPFR_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))
@@ -550,7 +562,9 @@
#endif
__MPFR_DECLSPEC int mpfr_pow (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_powr (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_pow_si (mpfr_ptr, mpfr_srcptr, long, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_compound_si (mpfr_ptr, mpfr_srcptr, long, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_pow_ui (mpfr_ptr, mpfr_srcptr, unsigned long,
mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_ui_pow_ui (mpfr_ptr, unsigned long, unsigned long,
@@ -608,6 +622,8 @@
__MPFR_DECLSPEC int mpfr_log2 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_log10 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_log1p (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_log2p1 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_log10p1 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_log_ui (mpfr_ptr, unsigned long, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_exp (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
@@ -614,6 +630,8 @@
__MPFR_DECLSPEC int mpfr_exp2 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_exp10 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_expm1 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_exp2m1 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_exp10m1 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_eint (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_li2 (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
@@ -661,6 +679,8 @@
__MPFR_DECLSPEC int mpfr_remainder (mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_fmod (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_fmod_ui (mpfr_ptr, mpfr_srcptr, unsigned long,
+ mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_fmodquo (mpfr_ptr, long*, mpfr_srcptr, mpfr_srcptr,
mpfr_rnd_t);
@@ -717,6 +737,22 @@
__MPFR_DECLSPEC int mpfr_csc (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_cot (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_sinu (mpfr_ptr, mpfr_srcptr, unsigned long, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_cosu (mpfr_ptr, mpfr_srcptr, unsigned long, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_tanu (mpfr_ptr, mpfr_srcptr, unsigned long, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_acosu (mpfr_ptr, mpfr_srcptr, unsigned long, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_asinu (mpfr_ptr, mpfr_srcptr, unsigned long, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_atanu (mpfr_ptr, mpfr_srcptr, unsigned long, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_atan2u (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, unsigned long, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_acospi (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_asinpi (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_atanpi (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_atan2pi (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
+
+__MPFR_DECLSPEC int mpfr_sinpi (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_cospi (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_tanpi (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
+
__MPFR_DECLSPEC int mpfr_hypot (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_erf (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_erfc (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
@@ -728,6 +764,7 @@
mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_rootn_ui (mpfr_ptr, mpfr_srcptr, unsigned long,
mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_rootn_si (mpfr_ptr, mpfr_srcptr, long, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_gamma (mpfr_ptr, mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_gamma_inc (mpfr_ptr, mpfr_srcptr, mpfr_srcptr,
mpfr_rnd_t);
@@ -822,7 +859,7 @@
(mpfr_round_nearest_away_begin(rop), \
mpfr_round_nearest_away_end((rop), func((rop), __VA_ARGS__, MPFR_RNDN)))
#else
-/* C89 version: function with one input supported */
+/* C90 version: function with one input supported */
#define mpfr_round_nearest_away(func, rop, op) \
(mpfr_round_nearest_away_begin(rop), \
mpfr_round_nearest_away_end((rop), func((rop), (op), MPFR_RNDN)))
@@ -829,7 +866,7 @@
#endif
/* Fast access macros to replace function interface.
- If the USER don't want to use the macro interface, let him make happy
+ If the user doesn't want to use the macro interface, let him make happy
even if it produces faster and smaller code. */
#ifndef MPFR_USE_NO_MACRO
@@ -1027,7 +1064,7 @@
#if __GNUC__ > 2 || __GNUC_MINOR__ >= 95
#define mpfr_custom_get_kind(x) \
__extension__ ({ \
- mpfr_ptr _x = (x); \
+ mpfr_srcptr _x = (x); \
_x->_mpfr_exp > __MPFR_EXP_INF ? \
(mpfr_int) MPFR_REGULAR_KIND * MPFR_SIGN (_x) \
: _x->_mpfr_exp == __MPFR_EXP_INF ? \
@@ -1123,6 +1160,8 @@
#define mpfr_set_uj_2exp __gmpfr_set_uj_2exp
#define mpfr_get_sj __gmpfr_mpfr_get_sj
#define mpfr_get_uj __gmpfr_mpfr_get_uj
+#define mpfr_pow_uj __gmpfr_mpfr_pow_uj
+#define mpfr_pow_sj __gmpfr_mpfr_pow_sj
__MPFR_DECLSPEC int mpfr_set_sj (mpfr_ptr, intmax_t, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_set_sj_2exp (mpfr_ptr, intmax_t, intmax_t,
mpfr_rnd_t);
@@ -1131,6 +1170,13 @@
mpfr_rnd_t);
__MPFR_DECLSPEC intmax_t mpfr_get_sj (mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC uintmax_t mpfr_get_uj (mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_pow_uj (mpfr_ptr, mpfr_srcptr, uintmax_t, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_pow_sj (mpfr_ptr, mpfr_srcptr, intmax_t, mpfr_rnd_t);
+/* define mpfr_pown (defined in IEEE 754-2019) as an alias for mpfr_pow_sj.
+ It is currently implemented as a macro, but this may change in the future
+ (it could be implemented as an inline function); in case of change, update
+ the manual. */
+#define mpfr_pown mpfr_pow_sj
#if defined (__cplusplus)
}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mpn_exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mpn_exp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mpn_exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_mpn_exp -- auxiliary function for mpfr_get_str and mpfr_set_str
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mul.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mul.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mul.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_mul -- multiply two floating-point numbers
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mul_1_extracted.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mul_1_extracted.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mul_1_extracted.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -4,7 +4,7 @@
Source: https://github.com/project-everest/hacl-star/tree/dev_mpfr/code/mpfr
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2exp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_mul_2exp -- multiply a floating-point number by a power of two
-Copyright 1999, 2001, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2si.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2si.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2si.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_mul_2si -- multiply a floating-point number by a power of two
-Copyright 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mul_2ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_mul_2ui -- multiply a floating-point number by a power of two
-Copyright 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mul_d.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mul_d.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mul_d.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_mul_d -- multiply a multiple precision floating-point number
by a machine double precision float
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mul_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mul_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mul_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_mul_ui -- multiply a floating-point number by a machine integer
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/mulders.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/mulders.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/mulders.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Mulders' short product, square and division.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/nbits_ulong.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/nbits_ulong.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/nbits_ulong.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,7 @@
/* mpfr_nbits_ulong -- number of significant bits in an unsigned long
+ mpfr_nbits_uj -- number of significant bits in an uintmax_t
-Copyright 2018-2022 Free Software Foundation, Inc.
+Copyright 2018-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -21,6 +22,7 @@
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
#define MPFR_NEED_LONGLONG_H /* for count_leading_zeros */
+#define MPFR_NEED_INTMAX_H
#include "mpfr-impl.h"
/* count the number of significant bits of n, i.e.,
@@ -81,3 +83,55 @@
MPFR_ASSERTD (cnt >= 0);
return cnt;
}
+
+#ifdef _MPFR_H_HAVE_INTMAX_T
+/* count the number of significant bits of n, i.e.,
+ nbits(uintmax_t) - count_leading_zeros (n) */
+int
+mpfr_nbits_uj (uintmax_t n)
+{
+ int cnt;
+
+ MPFR_ASSERTD (n > 0);
+
+ cnt = 0;
+
+ while (n >= 0x10000)
+ {
+ n >>= 16;
+ cnt += 16;
+ }
+
+ MPFR_ASSERTD (n <= 0xffff);
+
+ if (n >= 0x100)
+ {
+ n >>= 8;
+ cnt += 8;
+ }
+
+ MPFR_ASSERTD (n <= 0xff);
+
+ if (n >= 0x10)
+ {
+ n >>= 4;
+ cnt += 4;
+ }
+
+ MPFR_ASSERTD (n <= 0xf);
+
+ if (n >= 4)
+ {
+ n >>= 2;
+ cnt += 2;
+ }
+
+ MPFR_ASSERTD (n <= 3);
+
+ /* now n = 1, 2, or 3 */
+ cnt += 1 + (n >= 2);
+
+ MPFR_ASSERTD (cnt >= 0);
+ return cnt;
+}
+#endif
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/neg.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/neg.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/neg.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_neg -- change the sign of a floating-point number
-Copyright 1999-2001, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999-2001, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/next.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/next.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/next.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_nextabove, mpfr_nextbelow, mpfr_nexttoward -- next representable
floating-point number
-Copyright 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -23,8 +23,22 @@
/* Note concerning the exceptions: In case of NaN result, the NaN flag is
* set as usual. No underflow or overflow is generated (this contradicts
- * the obsolete IEEE 754-1985 standard for Nextafter, but conforms to the
- * current standard IEEE 754-2008 for nextUp and nextDown).
+ * the obsolete IEEE 754-1985 standard for nextafter, but conforms to the
+ * IEEE 754-2008/2019 standards, where the nextUp and nextDown operations
+ * replaced nextafter).
+ *
+ * For mpfr_nexttoward where x and y are zeros of different signs, the
+ * behavior is the same as the nextafter function from IEEE 754-1985
+ * (x is returned), but differs from the ISO C99 nextafter and nexttoward
+ * functions (where y is returned).
+ *
+ * In short:
+ * - mpfr_nextabove and mpfr_nextbelow are similar to nextUp and nextDown
+ * respectively (IEEE 2008+, ISO C2x), but with the usual MPFR rule for
+ * the NaN flag (because MPFR has a single kind of NaN);
+ * - mpfr_nexttoward is also similar to these functions concerning the
+ * exceptions and the sign of 0, and for the particular case x = y, it
+ * follows the old nextafter function from IEEE 754-1985.
*/
#include "mpfr-impl.h"
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/nrandom.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/nrandom.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/nrandom.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -2,7 +2,7 @@
and variance 1 and round it to the precision of rop according to the given
rounding mode.
-Copyright 2013-2022 Free Software Foundation, Inc.
+Copyright 2013-2023 Free Software Foundation, Inc.
Contributed by Charles Karney <charles at karney.com>, SRI International.
This file is part of the GNU MPFR Library.
@@ -31,6 +31,11 @@
* https://dx.doi.org/10.1145/2710016
* https://arxiv.org/abs/1303.6257
*
+ * Note: the algorithm implemented here has been improved in
+ * Du, Fan and Wei in "An improved exact sampling algorithm for the standard
+ * normal distribution", Computational Statistics, 2021,
+ * https://doi.org/10.1007/s00180-021-01136-w
+ *
* The implementation here closely follows the C++ one given in the paper
* above. However, here, C is simplified by using gmp_urandomm_ui; the initial
* rejection step in H just tests the leading bit of p; and the assignment of
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/odd_p.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/odd_p.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/odd_p.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_odd_p -- check for odd integers
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/out_str.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/out_str.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/out_str.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_out_str -- output a floating-point number to a stream
-Copyright 1999, 2001-2002, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2002, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/pool.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/pool.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/pool.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpz_t pool
-Copyright 2014-2022 Free Software Foundation, Inc.
+Copyright 2014-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/pow.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/pow.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/pow.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_pow -- power function x^y
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/pow_si.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/pow_si.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/pow_si.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_pow_si -- power function x^y with y a signed int
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -23,21 +23,32 @@
#define MPFR_NEED_LONGLONG_H /* for MPFR_INT_CEIL_LOG2 */
#include "mpfr-impl.h"
-/* The computation of y = pow_si(x,n) is done by
- * y = pow_ui(x,n) if n >= 0
- * y = 1 / pow_ui(x,-n) if n < 0
+/* The computation of y = pow_si/sj(x,n) is done by
+ * y = pow_ui/uj(x,n) if n >= 0
+ * y = 1 / pow_ui/uj(x,-n) if n < 0
*/
+#ifndef POW_S
+#define POW_S mpfr_pow_si
+#define POW_U mpfr_pow_ui
+#define SET_S mpfr_set_si
+#define SET_S_2EXP mpfr_set_si_2exp
+#define NBITS_UTYPE mpfr_nbits_ulong
+#define TYPE long int
+#define UTYPE unsigned long
+#define FSPEC "l"
+#endif
+
int
-mpfr_pow_si (mpfr_ptr y, mpfr_srcptr x, long int n, mpfr_rnd_t rnd)
+POW_S (mpfr_ptr y, mpfr_srcptr x, TYPE n, mpfr_rnd_t rnd)
{
MPFR_LOG_FUNC
- (("x[%Pu]=%.*Rg n=%ld rnd=%d",
+ (("x[%Pu]=%.*Rg n=%" FSPEC "d rnd=%d",
mpfr_get_prec (x), mpfr_log_prec, x, n, rnd),
("y[%Pu]=%.*Rg", mpfr_get_prec (y), mpfr_log_prec, y));
if (n >= 0)
- return mpfr_pow_ui (y, x, n, rnd);
+ return POW_U (y, x, n, rnd);
else
{
if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
@@ -49,7 +60,7 @@
}
else
{
- int positive = MPFR_IS_POS (x) || ((unsigned long) n & 1) == 0;
+ int positive = MPFR_IS_POS (x) || ((UTYPE) n & 1) == 0;
if (MPFR_IS_INF (x))
MPFR_SET_ZERO (y);
else /* x is zero */
@@ -130,8 +141,7 @@
MPFR_EMIN_MIN - 2 /* Underflow */ :
n != -1 && expx < 0 && expx < (__gmpfr_emax - 1) / n ?
MPFR_EMAX_MAX /* Overflow */ : n * expx;
- return mpfr_set_si_2exp (y, n % 2 ? MPFR_INT_SIGN (x) : 1,
- expy, rnd);
+ return SET_S_2EXP (y, n % 2 ? MPFR_INT_SIGN (x) : 1, expy, rnd);
}
/* General case */
@@ -144,12 +154,12 @@
mpfr_rnd_t rnd1;
int size_n;
int inexact;
- unsigned long abs_n;
+ UTYPE abs_n;
MPFR_SAVE_EXPO_DECL (expo);
MPFR_ZIV_DECL (loop);
- abs_n = - (unsigned long) n;
- size_n = mpfr_nbits_ulong (abs_n);
+ abs_n = - (UTYPE) n;
+ size_n = NBITS_UTYPE (abs_n);
/* initial working precision */
Ny = MPFR_PREC (y);
@@ -166,11 +176,31 @@
rnd1 = MPFR_EXP (x) < 1 ? MPFR_RNDZ :
(MPFR_IS_POS (x) ? MPFR_RNDU : MPFR_RNDD);
+ /* The following ensures that 1/x cannot underflow.
+ Since |x| < 2^emax, |1/x| > 2^(-emax) >= 2^emin. */
+ MPFR_STAT_STATIC_ASSERT (MPFR_EMIN_MIN + MPFR_EMAX_MAX <= 0);
+
MPFR_ZIV_INIT (loop, Nt);
for (;;)
{
MPFR_BLOCK_DECL (flags);
+ /* TODO: Compute POW_U before the division (instead of after)
+ in order to reduce the error in the intermediate result?
+ POW_U, whose condition number is |n|, which may be large,
+ would be called on an exact value. This may be important
+ in very small precisions.
+ In this case, if x^|n| underflows, then |x^n| > 2^emax
+ (real overflow, and we can return the result); and if
+ x^|n| overflows, then the result underflows or is very
+ close to the underflow threshold, so that we should use
+ mpfr_pow_general (as already done for MPFR_RNDN), which
+ can handle such a case.
+ So the advantage of computing POW_U before the division
+ is that the code would be slightly faster is the general
+ case, but it could be noticeably slower in very uncommon
+ cases (and only with the extended exponent range). */
+
/* compute (1/x)^|n| */
MPFR_BLOCK (flags, mpfr_ui_div (t, 1, x, rnd1));
MPFR_ASSERTD (! MPFR_UNDERFLOW (flags));
@@ -177,7 +207,7 @@
/* t = (1/x)*(1+theta) where |theta| <= 2^(-Nt) */
if (MPFR_UNLIKELY (MPFR_OVERFLOW (flags)))
goto overflow;
- MPFR_BLOCK (flags, mpfr_pow_ui (t, t, abs_n, rnd));
+ MPFR_BLOCK (flags, POW_U (t, t, abs_n, rnd));
/* t = (1/x)^|n|*(1+theta')^(|n|+1) where |theta'| <= 2^(-Nt).
If (|n|+1)*2^(-Nt) <= 1/2, which is satisfied as soon as
Nt >= bits(n)+2, then we can use Lemma \ref{lemma_graillat}
@@ -210,8 +240,8 @@
MPFR_ASSERTD (mpfr_cmp_si_2exp (x, MPFR_SIGN (x),
MPFR_EXP (x) - 1) != 0);
mpfr_init2 (y2, 2);
- mpfr_init2 (nn, sizeof (long) * CHAR_BIT);
- inexact = mpfr_set_si (nn, n, MPFR_RNDN);
+ mpfr_init2 (nn, sizeof (TYPE) * CHAR_BIT);
+ inexact = SET_S (nn, n, MPFR_RNDN);
MPFR_ASSERTN (inexact == 0);
inexact = mpfr_pow_general (y2, x, nn, rnd, 1,
(mpfr_save_expo_t *) NULL);
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/pow_sj.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/pow_sj.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/pow_sj.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,40 @@
+/* mpfr_pow_sj -- power function x^y with y an intmax_t
+
+Copyright 2021-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#define MPFR_NEED_INTMAX_H
+#include "mpfr-impl.h"
+
+#ifdef _MPFR_H_HAVE_INTMAX_T
+
+#define POW_S mpfr_pow_sj
+#define POW_U mpfr_pow_uj
+#define SET_S mpfr_set_sj
+#define SET_S_2EXP mpfr_set_sj_2exp
+#define NBITS_UTYPE mpfr_nbits_uj
+#define TYPE intmax_t
+#define UTYPE uintmax_t
+#define FSPEC "j"
+
+#include "pow_si.c"
+
+#endif
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/pow_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/pow_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/pow_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,6 @@
-/* mpfr_pow_ui-- compute the power of a floating-point
- by a machine integer
+/* mpfr_pow_ui -- compute the power of a floating-point by a machine integer
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -24,13 +23,20 @@
#define MPFR_NEED_LONGLONG_H
#include "mpfr-impl.h"
+#ifndef POW_U
+#define POW_U mpfr_pow_ui
+#define MPZ_SET_U mpz_set_ui
+#define UTYPE unsigned long int
+#define FSPEC "l"
+#endif
+
/* sets y to x^n, and return 0 if exact, non-zero otherwise */
int
-mpfr_pow_ui (mpfr_ptr y, mpfr_srcptr x, unsigned long int n, mpfr_rnd_t rnd)
+POW_U (mpfr_ptr y, mpfr_srcptr x, UTYPE n, mpfr_rnd_t rnd)
{
- unsigned long m;
+ UTYPE m;
mpfr_t res;
- mpfr_prec_t prec, err;
+ mpfr_prec_t prec, err, nlen;
int inexact;
mpfr_rnd_t rnd1;
MPFR_SAVE_EXPO_DECL (expo);
@@ -38,7 +44,7 @@
MPFR_BLOCK_DECL (flags);
MPFR_LOG_FUNC
- (("x[%Pu]=%.*Rg n=%lu rnd=%d",
+ (("x[%Pu]=%.*Rg n=%" FSPEC "u rnd=%d",
mpfr_get_prec (x), mpfr_log_prec, x, n, rnd),
("y[%Pu]=%.*Rg inexact=%d",
mpfr_get_prec (y), mpfr_log_prec, y, inexact));
@@ -89,9 +95,15 @@
/* Augment exponent range */
MPFR_SAVE_EXPO_MARK (expo);
+ for (m = n, nlen = 0; m != 0; nlen++, m >>= 1)
+ ;
+ /* 2^(nlen-1) <= n < 2^nlen */
+
/* set up initial precision */
prec = MPFR_PREC (y) + 3 + GMP_NUMB_BITS
+ MPFR_INT_CEIL_LOG2 (MPFR_PREC (y));
+ if (prec <= nlen)
+ prec = nlen + 1;
mpfr_init2 (res, prec);
rnd1 = MPFR_IS_POS (x) ? MPFR_RNDU : MPFR_RNDD; /* away */
@@ -101,21 +113,19 @@
{
int i;
- for (m = n, i = 0; m; i++, m >>= 1)
- ;
- /* now 2^(i-1) <= n < 2^i */
- MPFR_ASSERTD (prec > (mpfr_prec_t) i);
- err = prec - 1 - (mpfr_prec_t) i;
+ MPFR_ASSERTD (prec > nlen);
+ err = prec - 1 - nlen;
/* First step: compute square from x */
MPFR_BLOCK (flags,
inexact = mpfr_sqr (res, x, MPFR_RNDU);
- MPFR_ASSERTD (i >= 2);
- if (n & (1UL << (i-2)))
+ MPFR_ASSERTD (nlen >= 2 && nlen <= INT_MAX);
+ i = nlen;
+ if (n & ((UTYPE) 1 << (i-2)))
inexact |= mpfr_mul (res, res, x, rnd1);
for (i -= 3; i >= 0 && !MPFR_BLOCK_EXCEP; i--)
{
inexact |= mpfr_sqr (res, res, MPFR_RNDU);
- if (n & (1UL << i))
+ if (n & ((UTYPE) 1 << i))
inexact |= mpfr_mul (res, res, x, rnd1);
});
/* let r(n) be the number of roundings: we have r(2)=1, r(3)=2,
@@ -150,7 +160,7 @@
mpfr_clear (res);
MPFR_SAVE_EXPO_FREE (expo);
mpz_init (z);
- mpz_set_ui (z, n);
+ MPZ_SET_U (z, n);
inexact = mpfr_pow_z (y, x, z, rnd);
mpz_clear (z);
return inexact;
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/pow_uj.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/pow_uj.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/pow_uj.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,62 @@
+/* mpfr_pow_uj -- compute the power of a floating-point by a uintmax_t
+
+Copyright 2021-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#define MPFR_NEED_INTMAX_H
+#include "mpfr-impl.h"
+
+#ifdef _MPFR_H_HAVE_INTMAX_T
+
+#define POW_U mpfr_pow_uj
+#define MPZ_SET_U mpfr_mpz_set_uj
+#define UTYPE uintmax_t
+#define FSPEC "j"
+
+#define ULONG_BITS (sizeof (unsigned long) * CHAR_BIT)
+
+/* z <- n, assuming uintmax_t is at most twice as wide as unsigned long
+ and assume no padding bits.
+ FIXME: code should be shared with mpfr_set_uj_2exp to avoid such
+ limitations (and this could be more efficient).
+*/
+static void
+mpfr_mpz_set_uj (mpz_t z, uintmax_t n)
+{
+ if ((unsigned long) n == n)
+ mpz_set_ui (z, n);
+ else
+ {
+ uintmax_t h = (n >> (ULONG_BITS - 1)) >> 1;
+ /* equivalent to n >> ULONG_BITS, as a workaround to GCC bug 4210
+ "should not warn in dead code". */
+
+ MPFR_ASSERTN ((unsigned long) h == h);
+
+ mpz_set_ui (z, (unsigned long) h);
+ mpz_mul_2exp (z, z, ULONG_BITS);
+ mpz_add_ui (z, z, (unsigned long) n);
+ }
+}
+
+#include "pow_ui.c"
+
+#endif
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/pow_z.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/pow_z.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/pow_z.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_pow_z -- power function x^z with z a MPZ
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/powerof2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/powerof2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/powerof2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_powerof2_raw -- test whether a floating-point number is a power of 2
-Copyright 2002-2022 Free Software Foundation, Inc.
+Copyright 2002-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/powerpc64/mparam.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/powerpc64/mparam.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/powerpc64/mparam.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Various Thresholds of MPFR, not exported. -*- mode: C -*-
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/powr.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/powr.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/powr.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,60 @@
+/* mpfr_powr -- powr(x,y) = exp(y*log(x))
+
+Copyright 2021-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include "mpfr-impl.h"
+
+int
+mpfr_powr (mpfr_ptr z, mpfr_srcptr x, mpfr_srcptr y, mpfr_rnd_t rnd_mode)
+{
+ /* powr(x,y) is NaN for x=NaN or x < 0 (a)
+ powr(+/-0,+/-0) is NaN whereas pow(x,+/-0) = 1 if x is not NaN (b)
+ powr(+Inf,+/-0) is NaN whereas pow(x,+/-0) = 1 if x is not NaN (b)
+ We can use MPFR_IS_SINGULAR since we already excluded x=NaN and x=-Inf.
+ powr(1,+/-Inf) = NaN whereas pow(1,+/-Inf) = 1 (c) */
+ if (MPFR_IS_NAN (x) || MPFR_IS_STRICTNEG(x) || /* case (a) */
+ (MPFR_IS_SINGULAR(x) && MPFR_IS_ZERO(y)) || /* case (b) */
+ (mpfr_cmp_ui (x, 1) == 0 && MPFR_IS_INF(y))) /* case (c) */
+ {
+ MPFR_SET_NAN (z);
+ MPFR_RET_NAN;
+ }
+ /* for finite y < 0, powr(-0,y) is +Inf, whereas pow(-0,y) is -Inf for y an
+ odd negativeinteger, and +Inf otherwise */
+ if (MPFR_IS_ZERO(x) && MPFR_SIGN(x) < 0 && !MPFR_IS_SINGULAR (y)
+ && MPFR_IS_NEG(y))
+ {
+ MPFR_SET_INF (z);
+ MPFR_SET_POS (z);
+ MPFR_SET_DIVBY0 ();
+ MPFR_RET (0);
+ }
+ /* for y > 0, powr(-0,y) is +0, whereas pow gives -0 for y an odd integer */
+ if (MPFR_IS_ZERO(x) && MPFR_SIGN(x) < 0 && !MPFR_IS_SINGULAR (y)
+ && MPFR_IS_POS(y))
+ {
+ MPFR_SET_ZERO (z);
+ MPFR_SET_POS (z);
+ MPFR_RET (0);
+ }
+ /* otherwise powr coincides with pow */
+ return mpfr_pow (z, x, y, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/print_raw.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/print_raw.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/print_raw.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -2,7 +2,7 @@
of a significand of floating-point number (for the tests and
debugging purpose)
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/print_rnd_mode.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/print_rnd_mode.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/print_rnd_mode.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_print_rnd_mode -- convert a given rounding mode to a string
-Copyright 1999, 2001-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/printf.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/printf.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/printf.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Formatted output functions (printf functions family).
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/random_deviate.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/random_deviate.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/random_deviate.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* random_deviate routines for mpfr_erandom and mpfr_nrandom.
-Copyright 2013-2022 Free Software Foundation, Inc.
+Copyright 2013-2023 Free Software Foundation, Inc.
Contributed by Charles Karney <charles at karney.com>, SRI International.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/random_deviate.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/random_deviate.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/random_deviate.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Declarations of random_deviate routines for mpfr_erandom and mpfr_nrandom.
-Copyright 2013-2022 Free Software Foundation, Inc.
+Copyright 2013-2023 Free Software Foundation, Inc.
Contributed by Charles Karney <charles at karney.com>, SRI International.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/rec_sqrt.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/rec_sqrt.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/rec_sqrt.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_rec_sqrt -- inverse square root
-Copyright 2008-2022 Free Software Foundation, Inc.
+Copyright 2008-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -274,7 +274,7 @@
umul_ppmm(r[1], r[0], x[ln], x[ln]);
else
{
- mpn_mul_n (r, x + ln, x + ln, xn);
+ mpn_sqr (r, x + ln, xn);
/* we have {r, 2*xn} = X_h^2 */
if (rn < 2 * xn)
r ++;
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/reldiff.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/reldiff.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/reldiff.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_reldiff -- compute relative difference of two floating-point numbers.
-Copyright 2000-2001, 2004-2022 Free Software Foundation, Inc.
+Copyright 2000-2001, 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/rem1.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/rem1.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/rem1.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -2,7 +2,7 @@
mpfr_fmod -- compute the floating-point remainder of x/y
mpfr_remquo and mpfr_remainder -- argument reduction functions
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -40,10 +40,10 @@
If rem is zero, then it has the sign of x.
The returned 'int' is the inexact flag giving the place of rem wrt x - q*y.
- If x or y is NaN: *quo is undefined, rem is NaN.
- If x is Inf, whatever y: *quo is undefined, rem is NaN.
+ If x or y is NaN: *quo is unspecified, rem is NaN.
+ If x is Inf, whatever y: *quo is unspecified, rem is NaN.
If y is Inf, x not NaN nor Inf: *quo is 0, rem is x.
- If y is 0, whatever x: *quo is undefined, rem is NaN.
+ If y is 0, whatever x: *quo is unspecified, rem is NaN.
If x is 0, whatever y (not NaN nor 0): *quo is 0, rem is x.
Otherwise if x and y are neither NaN, Inf nor 0, q is always defined,
@@ -68,7 +68,7 @@
if (MPFR_IS_NAN (x) || MPFR_IS_NAN (y) || MPFR_IS_INF (x)
|| MPFR_IS_ZERO (y))
{
- /* for remquo, quo is undefined */
+ /* for remquo, *quo is unspecified */
MPFR_SET_NAN (rem);
MPFR_RET_NAN;
}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/rint.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/rint.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/rint.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_rint -- Round to an integer.
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/rndna.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/rndna.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/rndna.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_round_nearest_away -- round to nearest away
-Copyright 2012-2022 Free Software Foundation, Inc.
+Copyright 2012-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/root.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/root.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/root.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
-/* mpfr_root -- kth root.
+/* mpfr_root, mpfr_rootn_ui, mpfr_rootn_si -- kth root.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -299,6 +299,145 @@
}
int
+mpfr_rootn_si (mpfr_ptr y, mpfr_srcptr x, long k, mpfr_rnd_t rnd_mode)
+{
+ int inexact;
+ MPFR_ZIV_DECL(loop);
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ MPFR_LOG_FUNC
+ (("x[%Pu]=%.*Rg k=%lu rnd=%d",
+ mpfr_get_prec (x), mpfr_log_prec, x, k, rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d",
+ mpfr_get_prec (y), mpfr_log_prec, y, inexact));
+
+ if (k >= 0)
+ return mpfr_rootn_ui (y, x, k, rnd_mode);
+
+ /* Singular values for k < 0 */
+ if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
+ {
+ if (MPFR_IS_NAN (x))
+ {
+ MPFR_SET_NAN (y); /* NaN^(1/k) = NaN */
+ MPFR_RET_NAN;
+ }
+
+ if (MPFR_IS_INF (x)) /* (+Inf)^(1/k) = +0
+ (-Inf)^(1/k) = -0 if k odd
+ (-Inf)^(1/k) = NaN if k even */
+ {
+ /* Cast k to an unsigned type so that this is well-defined. */
+ if (MPFR_IS_NEG (x) && ((unsigned long) k & 1) == 0)
+ {
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+ MPFR_SET_ZERO (y);
+ MPFR_SET_SAME_SIGN (y, x);
+ }
+ else /* x is necessarily 0: (+0)^(1/k) = +Inf
+ (-0)^(1/k) = +Inf if k even
+ (-0)^(1/k) = -Inf if k odd */
+ {
+ MPFR_ASSERTD (MPFR_IS_ZERO (x));
+ MPFR_SET_INF (y);
+ /* Cast k to an unsigned type so that this is well-defined. */
+ if (MPFR_IS_POS (x) || ((unsigned long) k & 1) == 0)
+ MPFR_SET_POS (y);
+ else
+ MPFR_SET_NEG (y);
+ MPFR_SET_DIVBY0 ();
+ }
+ MPFR_RET (0);
+ }
+
+ /* Returns NAN for x < 0 and k even */
+ /* Cast k to an unsigned type so that this is well-defined. */
+ if (MPFR_UNLIKELY (MPFR_IS_NEG (x) && ((unsigned long) k & 1) == 0))
+ {
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+
+ /* Special case |x| = 1. Note that if x = -1, then k is odd
+ (NaN results have already been filtered), so that y = -1. */
+ if (mpfr_cmpabs (x, __gmpfr_one) == 0)
+ return mpfr_set (y, x, rnd_mode);
+
+ /* The case k = -1 is probably rare in practice (the user would directly
+ do a division if k is a constant, and even mpfr_pow_si is more natural).
+ But let's take it into account here, so that in the general case below,
+ overflows and underflows will be impossible, and we won't need to test
+ and handle the corresponding flags. And let's take the opportunity to
+ handle k = -2 as well since mpfr_rec_sqrt is faster than the generic
+ mpfr_rootn_si (this is visible when running the trec_sqrt tests with
+ mpfr_rootn_si + generic code for k = -2 instead of mpfr_rec_sqrt). */
+ /* TODO: If MPFR_WANT_ASSERT >= 2, define a new mpfr_rootn_si function
+ so that for k = -2, compute the result with both mpfr_rec_sqrt and
+ the generic code, and compare (ditto for mpfr_rec_sqrt), like what
+ is done in add1sp.c (mpfr_add1sp and mpfr_add1 results compared). */
+ if (k >= -2)
+ {
+ if (k == -1)
+ return mpfr_ui_div (y, 1, x, rnd_mode);
+ else
+ return mpfr_rec_sqrt (y, x, rnd_mode);
+ }
+
+ /* TODO: Should we expand mpfr_root_aux to negative values of k
+ and call it if k < -100, a bit like in mpfr_rootn_ui? */
+
+ /* General case */
+ {
+ mpfr_t t;
+ mpfr_prec_t Ny; /* target precision */
+ mpfr_prec_t Nt; /* working precision */
+
+ /* initial working precision */
+ Ny = MPFR_PREC (y);
+ Nt = Ny + 10;
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ mpfr_init2 (t, Nt);
+
+ MPFR_ZIV_INIT (loop, Nt);
+ for (;;)
+ {
+ /* Compute the root before the division, in particular to avoid
+ overflows and underflows.
+ Moreover, midpoints are impossible. And an exact case implies
+ that |x| is a power of 2; such a case is not the most common
+ one, so that we detect it only after MPFR_CAN_ROUND. */
+
+ /* Let's use MPFR_RNDF to avoid the potentially costly detection
+ of exact cases in mpfr_rootn_ui (we just lose one bit in the
+ final approximation). */
+ mpfr_rootn_ui (t, x, - (unsigned long) k, MPFR_RNDF);
+ inexact = mpfr_ui_div (t, 1, t, rnd_mode);
+
+ /* The final error is bounded by 5 ulp (see algorithms.tex,
+ "Generic error of inverse"), which is <= 2^3 ulp. */
+ MPFR_ASSERTD (! MPFR_IS_SINGULAR (t));
+ if (MPFR_LIKELY (MPFR_CAN_ROUND (t, Nt - 3, Ny, rnd_mode) ||
+ (inexact == 0 && mpfr_powerof2_raw (x))))
+ break;
+
+ MPFR_ZIV_NEXT (loop, Nt);
+ mpfr_set_prec (t, Nt);
+ }
+ MPFR_ZIV_FREE (loop);
+
+ inexact = mpfr_set (y, t, rnd_mode);
+ mpfr_clear (t);
+
+ MPFR_SAVE_EXPO_FREE (expo);
+ return mpfr_check_range (y, inexact, rnd_mode);
+ }
+}
+
+int
mpfr_root (mpfr_ptr y, mpfr_srcptr x, unsigned long k, mpfr_rnd_t rnd_mode)
{
MPFR_LOG_FUNC
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/round_near_x.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/round_near_x.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/round_near_x.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_round_near_x -- Round a floating point number nears another one.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/round_p.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/round_p.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/round_p.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_round_p -- check if an approximation is roundable.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/round_prec.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/round_prec.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/round_prec.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_round_raw_generic, mpfr_round_raw2, mpfr_round_raw, mpfr_prec_round,
mpfr_can_round, mpfr_can_round_raw -- various rounding functions
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/round_raw_generic.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/round_raw_generic.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/round_raw_generic.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_round_raw_generic -- Generic rounding function
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/scale2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/scale2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/scale2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_scale2 -- multiply a double float by 2^exp
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sec.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sec.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sec.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sec - secant function = 1/cos.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sech.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sech.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sech.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sech - Hyperbolic secant function = 1/cosh.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set -- copy of a floating-point number
-Copyright 1999, 2001-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -69,6 +69,11 @@
int
mpfr_set (mpfr_ptr a, mpfr_srcptr b, mpfr_rnd_t rnd_mode)
{
+ /* Contrary to other mpfr_set4 based functions (mpfr_abs, mpfr_neg, etc.),
+ do not detect the case a == b as there is no interest to call mpfr_set
+ in this case, so that it is very unlikely that the user calls it
+ with a == b (this is the reverse of what is assumed for the other
+ functions). */
return mpfr_set4 (a, b, rnd_mode, MPFR_SIGN (b));
}
@@ -77,7 +82,16 @@
int
mpfr_abs (mpfr_ptr a, mpfr_srcptr b, mpfr_rnd_t rnd_mode)
{
- return mpfr_set4 (a, b, rnd_mode, MPFR_SIGN_POS);
+ if (MPFR_UNLIKELY (a != b))
+ return mpfr_set4 (a, b, rnd_mode, MPFR_SIGN_POS);
+ else
+ {
+ MPFR_SET_POS (a);
+ if (MPFR_UNLIKELY (MPFR_IS_NAN (b)))
+ MPFR_RET_NAN;
+ else
+ MPFR_RET (0);
+ }
}
/* Round (u, inex) into s with rounding mode rnd_mode, where inex is
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_d.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_d.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_d.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_set_d -- convert a machine double precision float to
a multiple precision floating-point number
-Copyright 1999-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -191,8 +191,9 @@
#ifndef __clang__
man[0] = d;
#else
- /* clang produces an invalid exception when d >= 2^63,
- see <https://bugs.llvm.org/show_bug.cgi?id=17686>.
+ /* clang up to version 11 produces an invalid exception when d >= 2^63,
+ see <https://github.com/llvm/llvm-project/issues/18060>
+ (old URL: <https://bugs.llvm.org/show_bug.cgi?id=17686>).
Since this is always the case, here, we use the following patch. */
MPFR_STAT_STATIC_ASSERT (GMP_NUMB_BITS == 64);
man[0] = 0x8000000000000000 + (mp_limb_t) (d - 0x8000000000000000);
@@ -248,6 +249,7 @@
if (MPFR_UNLIKELY(DOUBLE_ISNAN(d)))
{
+ /* we don't propagate the sign bit */
MPFR_SET_NAN(r);
MPFR_RET_NAN;
}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_d128.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_d128.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_d128.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -3,9 +3,9 @@
See https://gcc.gnu.org/legacy-ml/gcc/2006-06/msg00691.html,
https://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html,
-and TR 24732 <http://www.open-std.org/jtc1/sc22/wg14/www/projects#24732>.
+and TR 24732 <https://www.open-std.org/jtc1/sc22/wg14/www/projects#24732>.
-Copyright 2006-2022 Free Software Foundation, Inc.
+Copyright 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramel projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -278,6 +278,7 @@
if (MPFR_UNLIKELY (DOUBLE_ISNAN (d))) /* NaN */
{
+ /* we don't propagate the sign bit */
sprintf (s, "NaN"); /* sprintf puts a final '\0' */
return;
}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_d64.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_d64.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_d64.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -3,9 +3,9 @@
See https://gcc.gnu.org/legacy-ml/gcc/2006-06/msg00691.html,
https://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html,
-and TR 24732 <http://www.open-std.org/jtc1/sc22/wg14/www/projects#24732>.
+and TR 24732 <https://www.open-std.org/jtc1/sc22/wg14/www/projects#24732>.
-Copyright 2006-2022 Free Software Foundation, Inc.
+Copyright 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -289,6 +289,7 @@
if (MPFR_UNLIKELY (DOUBLE_ISNAN (d))) /* NaN */
{
+ /* we don't propagate the sign bit */
sprintf (s, "NaN"); /* sprintf puts a final '\0' */
return;
}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_dfl_prec.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_dfl_prec.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_dfl_prec.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_default_prec, mpfr_get_default_prec -- set/get default precision
-Copyright 1999-2001, 2004-2022 Free Software Foundation, Inc.
+Copyright 1999-2001, 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_exp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_exp - set the exponent of a floating-point number
-Copyright 2002-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2002-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_f.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_f.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_f.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_f -- set a MPFR number from a GNU MPF number
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_float128.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_float128.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_float128.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_set_float128 -- convert a machine _Float128 number to
a multiple precision floating-point number
-Copyright 2012-2022 Free Software Foundation, Inc.
+Copyright 2012-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_flt.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_flt.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_flt.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_flt -- convert a machine single precision float to mpfr_t
-Copyright 2009-2022 Free Software Foundation, Inc.
+Copyright 2009-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -26,9 +26,9 @@
mpfr_set_flt (mpfr_ptr r, float f, mpfr_rnd_t rnd_mode)
{
/* we convert f to double precision and use mpfr_set_d;
- NaN and infinities should be preserved, and all single precision
- numbers are exactly representable in the double format, thus the
- conversion is always exact */
+ NaN and infinities should be preserved (except the sign bit for NaN),
+ and all single precision numbers are exactly representable in the double
+ format, thus the conversion is always exact */
return mpfr_set_d (r, (double) f, rnd_mode);
}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_inf.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_inf.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_inf.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
-/* mpfr_set_inf -- set a number to plus or minus infinity.
+/* mpfr_set_inf -- set a number to positive or negative infinity.
-Copyright 2002, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2002, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_ld.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_ld.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_ld.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_set_ld -- convert a machine long double to
a multiple precision floating-point number
-Copyright 2002-2022 Free Software Foundation, Inc.
+Copyright 2002-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -29,7 +29,7 @@
/* To check for +inf, one can use the test x > LDBL_MAX, as LDBL_MAX is
the maximum finite number representable in a long double, according
to DR 467; see
- http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2092.htm
+ https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2092.htm
If this fails on some platform, a test x - x != 0 might be used. */
#if defined(HAVE_LDOUBLE_IS_DOUBLE)
@@ -72,6 +72,7 @@
/* Check for NAN */
if (MPFR_UNLIKELY (DOUBLE_ISNAN (d)))
{
+ /* we don't propagate the sign bit */
MPFR_SET_NAN (r);
MPFR_RET_NAN;
}
@@ -176,7 +177,8 @@
#elif defined(HAVE_LDOUBLE_MAYBE_DOUBLE_DOUBLE)
-/* double-double code */
+/* double-double code, see
+ https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libgcc/config/rs6000/ibm-ldouble-format;h=e8ada17f7696cd942e710d5b67d4149f5fcccf45;hb=HEAD */
int
mpfr_set_ld (mpfr_ptr r, long double d, mpfr_rnd_t rnd_mode)
{
@@ -185,8 +187,9 @@
double h, l;
MPFR_SAVE_EXPO_DECL (expo);
- /* Check for NAN */
- LONGDOUBLE_NAN_ACTION (d, goto nan);
+ /* Check for NAN. Since we can't use isnan(), we rely on the
+ LONGDOUBLE_NAN_ACTION macro. The sign bit is not propagated. */
+ LONGDOUBLE_NAN_ACTION (d, { MPFR_SET_NAN(r); MPFR_RET_NAN; });
/* Check for INF */
if (d > LDBL_MAX)
@@ -226,10 +229,6 @@
MPFR_SAVE_EXPO_FREE (expo);
inexact = mpfr_check_range (r, inexact, rnd_mode);
return inexact;
-
- nan:
- MPFR_SET_NAN(r);
- MPFR_RET_NAN;
}
#else
@@ -243,8 +242,9 @@
long double x;
MPFR_SAVE_EXPO_DECL (expo);
- /* Check for NAN */
- LONGDOUBLE_NAN_ACTION (d, goto nan);
+ /* Check for NAN. Since we can't use isnan(), we rely on the
+ LONGDOUBLE_NAN_ACTION macro. The sign bit is not propagated. */
+ LONGDOUBLE_NAN_ACTION (d, { MPFR_SET_NAN(r); MPFR_RET_NAN; });
/* Check for INF */
if (d > LDBL_MAX)
@@ -415,10 +415,6 @@
MPFR_SAVE_EXPO_FREE (expo);
return mpfr_check_range (r, inexact, rnd_mode);
-
- nan:
- MPFR_SET_NAN(r);
- MPFR_RET_NAN;
}
#endif
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_nan.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_nan.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_nan.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_nan -- set a number to NaN.
-Copyright 2002, 2006-2022 Free Software Foundation, Inc.
+Copyright 2002, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_prc_raw.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_prc_raw.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_prc_raw.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_prec_raw -- reset the precision of a floating-point number
-Copyright 2000-2001, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2000-2001, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_prec.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_prec.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_prec.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_prec -- reset the precision of a floating-point number
-Copyright 1999, 2001-2002, 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001-2002, 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -27,6 +27,8 @@
{
mp_size_t xsize, xoldsize;
+ MPFR_LOG_MSG (("prec=%Pu\n", p));
+
/* first, check if p is correct */
MPFR_ASSERTN (MPFR_PREC_COND (p));
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_q.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_q.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_q.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_q -- set a floating-point number from a multiple-precision rational
-Copyright 2000-2002, 2004-2022 Free Software Foundation, Inc.
+Copyright 2000-2002, 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_rnd.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_rnd.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_rnd.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_set_default_rounding_mode -- set the default rounding mode
mpfr_get_default_rounding_mode -- get the default rounding mode
-Copyright 1999, 2001, 2004-2022 Free Software Foundation, Inc.
+Copyright 1999, 2001, 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_si.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_si.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_si.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_si -- set a MPFR number from a machine signed integer
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_si_2exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_si_2exp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_si_2exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_set_si_2exp -- set a MPFR number from a machine signed integer with
a shift
-Copyright 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_sj.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_sj.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_sj.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_sj -- set a MPFR number from a huge machine signed integer
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_str.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_str.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_str.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_str -- set a floating-point number from a string
-Copyright 2000-2022 Free Software Foundation, Inc.
+Copyright 2000-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_str_raw.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_str_raw.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_str_raw.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_str_binary -- set a floating-point number from a binary string
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_ui -- set a MPFR number from a machine unsigned integer
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_ui_2exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_ui_2exp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_ui_2exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_set_ui_2exp -- set a MPFR number from a machine unsigned integer with
a shift
-Copyright 2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_uj.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_uj.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_uj.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_uj -- set a MPFR number from a huge machine unsigned integer
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_z.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_z.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_z.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_set_z -- set a floating-point number from a multiple-precision integer
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/set_z_2exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_z_2exp.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_z_2exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,199 @@
+/* mpfr_set_z_2exp -- set a floating-point number from a multiple-precision
+ integer and an exponent
+
+Copyright 1999-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#include "mpfr-impl.h"
+
+/* set f to the integer z multiplied by 2^e */
+int
+mpfr_set_z_2exp (mpfr_ptr f, mpz_srcptr z, mpfr_exp_t e, mpfr_rnd_t rnd_mode)
+{
+ mp_size_t fn, zn, dif;
+ int k, sign_z, inex;
+ mp_limb_t *fp, *zp;
+ mpfr_exp_t exp, nmax;
+ mpfr_uexp_t uexp;
+
+ sign_z = mpz_sgn (z);
+ if (MPFR_UNLIKELY (sign_z == 0)) /* ignore the exponent for 0 */
+ {
+ MPFR_SET_ZERO(f);
+ MPFR_SET_POS(f);
+ MPFR_RET(0);
+ }
+ MPFR_ASSERTD (sign_z == MPFR_SIGN_POS || sign_z == MPFR_SIGN_NEG);
+
+ zn = ABSIZ(z); /* limb size of z */
+ MPFR_ASSERTD (zn >= 1);
+ nmax = MPFR_EMAX_MAX / GMP_NUMB_BITS + 1;
+ /* Detect early overflow with zn + en > nmax,
+ where en = floor(e / GMP_NUMB_BITS).
+ This is checked without an integer overflow (even assuming some
+ future version of GMP, where limitations may be removed). */
+ if (MPFR_UNLIKELY (e >= 0 ?
+ zn > nmax - e / GMP_NUMB_BITS :
+ zn + (e + 1) / GMP_NUMB_BITS - 1 > nmax))
+ return mpfr_overflow (f, rnd_mode, sign_z);
+ /* because zn + en >= MPFR_EMAX_MAX / GMP_NUMB_BITS + 2
+ implies (zn + en) * GMP_NUMB_BITS >= MPFR_EMAX_MAX + GMP_NUMB_BITS + 1
+ and exp = zn * GMP_NUMB_BITS + e - k
+ >= (zn + en) * GMP_NUMB_BITS - k > MPFR_EMAX_MAX */
+
+ fp = MPFR_MANT (f);
+ fn = MPFR_LIMB_SIZE (f);
+ dif = zn - fn;
+ zp = PTR(z);
+ count_leading_zeros (k, zp[zn-1]);
+
+ /* now zn + en <= MPFR_EMAX_MAX / GMP_NUMB_BITS + 1
+ thus (zn + en) * GMP_NUMB_BITS <= MPFR_EMAX_MAX + GMP_NUMB_BITS
+ and exp = zn * GMP_NUMB_BITS + e - k
+ <= (zn + en) * GMP_NUMB_BITS - k + GMP_NUMB_BITS - 1
+ <= MPFR_EMAX_MAX + 2 * GMP_NUMB_BITS - 1 */
+ /* We need to compute exp = zn * GMP_NUMB_BITS + e - k with well-defined
+ operations (no integer overflows / no implementation-defined results).
+ The mathematical result of zn * GMP_NUMB_BITS may be larger than
+ the largest value of mpfr_exp_t while exp could still be less than
+ __gmpfr_emax. Thanks to early overflow detection, we can compute the
+ result in modular arithmetic, using mpfr_uexp_t, and convert it to
+ mpfr_exp_t. */
+ uexp = (mpfr_uexp_t) zn * GMP_NUMB_BITS + (mpfr_uexp_t) e - k;
+
+ /* Convert to signed in a portable way (see doc/README.dev).
+ On most platforms, this can be optimized to identity (no-op). */
+ exp = uexp > MPFR_EXP_MAX ? -1 - (mpfr_exp_t) ~uexp : (mpfr_exp_t) uexp;
+
+ /* The exponent will be exp or exp + 1 (due to rounding) */
+
+ if (MPFR_UNLIKELY (exp > __gmpfr_emax))
+ return mpfr_overflow (f, rnd_mode, sign_z);
+ if (MPFR_UNLIKELY (exp + 1 < __gmpfr_emin))
+ return mpfr_underflow (f, rnd_mode == MPFR_RNDN ? MPFR_RNDZ : rnd_mode,
+ sign_z);
+
+ if (MPFR_LIKELY (dif >= 0))
+ {
+ mp_limb_t rb, sb, ulp;
+ int sh;
+
+ /* number has to be truncated */
+ if (MPFR_LIKELY (k != 0))
+ {
+ mpn_lshift (fp, &zp[dif], fn, k);
+ if (MPFR_UNLIKELY (dif > 0))
+ fp[0] |= zp[dif - 1] >> (GMP_NUMB_BITS - k);
+ }
+ else
+ MPN_COPY (fp, zp + dif, fn);
+
+ /* Compute Rounding Bit and Sticky Bit */
+ MPFR_UNSIGNED_MINUS_MODULO (sh, MPFR_PREC (f) );
+ if (MPFR_LIKELY (sh != 0))
+ {
+ mp_limb_t mask = MPFR_LIMB_ONE << (sh-1);
+ mp_limb_t limb = fp[0];
+ rb = limb & mask;
+ sb = limb & (mask-1);
+ ulp = 2*mask;
+ fp[0] = limb & ~(ulp-1);
+ }
+ else /* sh == 0 */
+ {
+ mp_limb_t mask = MPFR_LIMB_ONE << (GMP_NUMB_BITS - 1 - k);
+ if (MPFR_UNLIKELY (dif > 0))
+ {
+ rb = zp[--dif] & mask;
+ sb = zp[dif] & (mask-1);
+ }
+ else
+ rb = sb = 0;
+ k = 0;
+ ulp = MPFR_LIMB_ONE;
+ }
+ if (MPFR_UNLIKELY (sb == 0 && dif > 0))
+ {
+ sb = zp[--dif];
+ if (MPFR_LIKELY (k != 0))
+ sb &= MPFR_LIMB_MASK (GMP_NUMB_BITS - k);
+ if (MPFR_UNLIKELY (sb == 0) && MPFR_LIKELY (dif > 0))
+ do {
+ sb = zp[--dif];
+ } while (dif > 0 && sb == 0);
+ }
+
+ /* Rounding */
+ if (MPFR_LIKELY (rnd_mode == MPFR_RNDN))
+ {
+ if (rb == 0 || MPFR_UNLIKELY (sb == 0 && (fp[0] & ulp) == 0))
+ goto trunc;
+ else
+ goto addoneulp;
+ }
+ else /* Not Nearest */
+ {
+ if (MPFR_LIKELY (MPFR_IS_LIKE_RNDZ (rnd_mode, sign_z < 0))
+ || MPFR_UNLIKELY ( (sb | rb) == 0 ))
+ goto trunc;
+ else
+ goto addoneulp;
+ }
+
+ trunc:
+ inex = - ((sb | rb) != 0);
+ goto end;
+
+ addoneulp:
+ inex = 1;
+ if (MPFR_UNLIKELY (mpn_add_1 (fp, fp, fn, ulp)))
+ {
+ /* Pow 2 case */
+ if (MPFR_UNLIKELY (exp == __gmpfr_emax))
+ return mpfr_overflow (f, rnd_mode, sign_z);
+ exp ++;
+ fp[fn-1] = MPFR_LIMB_HIGHBIT;
+ }
+ end:
+ (void) 0;
+ }
+ else /* dif < 0: Mantissa F is strictly bigger than z's one */
+ {
+ if (MPFR_LIKELY (k != 0))
+ mpn_lshift (fp - dif, zp, zn, k);
+ else
+ MPN_COPY (fp - dif, zp, zn);
+ /* fill with zeroes */
+ MPN_ZERO (fp, -dif);
+ inex = 0; /* result is exact */
+ }
+
+ if (MPFR_UNLIKELY (exp < __gmpfr_emin))
+ {
+ if (rnd_mode == MPFR_RNDN && inex == 0 && mpfr_powerof2_raw (f))
+ rnd_mode = MPFR_RNDZ;
+ return mpfr_underflow (f, rnd_mode, sign_z);
+ }
+
+ MPFR_SET_EXP (f, exp);
+ MPFR_SET_SIGN (f, sign_z);
+ MPFR_RET (inex*sign_z);
+}
Deleted: trunk/Build/source/libs/mpfr/mpfr-src/src/set_z_exp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_z_exp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_z_exp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,199 +0,0 @@
-/* mpfr_set_z_2exp -- set a floating-point number from a multiple-precision
- integer and an exponent
-
-Copyright 1999-2022 Free Software Foundation, Inc.
-Contributed by the AriC and Caramba projects, INRIA.
-
-This file is part of the GNU MPFR Library.
-
-The GNU MPFR Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 3 of the License, or (at your
-option) any later version.
-
-The GNU MPFR Library is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
-License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
-https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
-51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#define MPFR_NEED_LONGLONG_H
-#include "mpfr-impl.h"
-
-/* set f to the integer z multiplied by 2^e */
-int
-mpfr_set_z_2exp (mpfr_ptr f, mpz_srcptr z, mpfr_exp_t e, mpfr_rnd_t rnd_mode)
-{
- mp_size_t fn, zn, dif;
- int k, sign_z, inex;
- mp_limb_t *fp, *zp;
- mpfr_exp_t exp, nmax;
- mpfr_uexp_t uexp;
-
- sign_z = mpz_sgn (z);
- if (MPFR_UNLIKELY (sign_z == 0)) /* ignore the exponent for 0 */
- {
- MPFR_SET_ZERO(f);
- MPFR_SET_POS(f);
- MPFR_RET(0);
- }
- MPFR_ASSERTD (sign_z == MPFR_SIGN_POS || sign_z == MPFR_SIGN_NEG);
-
- zn = ABSIZ(z); /* limb size of z */
- MPFR_ASSERTD (zn >= 1);
- nmax = MPFR_EMAX_MAX / GMP_NUMB_BITS + 1;
- /* Detect early overflow with zn + en > nmax,
- where en = floor(e / GMP_NUMB_BITS).
- This is checked without an integer overflow (even assuming some
- future version of GMP, where limitations may be removed). */
- if (MPFR_UNLIKELY (e >= 0 ?
- zn > nmax - e / GMP_NUMB_BITS :
- zn + (e + 1) / GMP_NUMB_BITS - 1 > nmax))
- return mpfr_overflow (f, rnd_mode, sign_z);
- /* because zn + en >= MPFR_EMAX_MAX / GMP_NUMB_BITS + 2
- implies (zn + en) * GMP_NUMB_BITS >= MPFR_EMAX_MAX + GMP_NUMB_BITS + 1
- and exp = zn * GMP_NUMB_BITS + e - k
- >= (zn + en) * GMP_NUMB_BITS - k > MPFR_EMAX_MAX */
-
- fp = MPFR_MANT (f);
- fn = MPFR_LIMB_SIZE (f);
- dif = zn - fn;
- zp = PTR(z);
- count_leading_zeros (k, zp[zn-1]);
-
- /* now zn + en <= MPFR_EMAX_MAX / GMP_NUMB_BITS + 1
- thus (zn + en) * GMP_NUMB_BITS <= MPFR_EMAX_MAX + GMP_NUMB_BITS
- and exp = zn * GMP_NUMB_BITS + e - k
- <= (zn + en) * GMP_NUMB_BITS - k + GMP_NUMB_BITS - 1
- <= MPFR_EMAX_MAX + 2 * GMP_NUMB_BITS - 1 */
- /* We need to compute exp = zn * GMP_NUMB_BITS + e - k with well-defined
- operations (no integer overflows / no implementation-defined results).
- The mathematical result of zn * GMP_NUMB_BITS may be larger than
- the largest value of mpfr_exp_t while exp could still be less than
- __gmpfr_emax. Thanks to early overflow detection, we can compute the
- result in modular arithmetic, using mpfr_uexp_t, and convert it to
- mpfr_exp_t. */
- uexp = (mpfr_uexp_t) zn * GMP_NUMB_BITS + (mpfr_uexp_t) e - k;
-
- /* Convert to signed in a portable way (see doc/README.dev).
- On most platforms, this can be optimized to identity (no-op). */
- exp = uexp > MPFR_EXP_MAX ? -1 - (mpfr_exp_t) ~uexp : (mpfr_exp_t) uexp;
-
- /* The exponent will be exp or exp + 1 (due to rounding) */
-
- if (MPFR_UNLIKELY (exp > __gmpfr_emax))
- return mpfr_overflow (f, rnd_mode, sign_z);
- if (MPFR_UNLIKELY (exp + 1 < __gmpfr_emin))
- return mpfr_underflow (f, rnd_mode == MPFR_RNDN ? MPFR_RNDZ : rnd_mode,
- sign_z);
-
- if (MPFR_LIKELY (dif >= 0))
- {
- mp_limb_t rb, sb, ulp;
- int sh;
-
- /* number has to be truncated */
- if (MPFR_LIKELY (k != 0))
- {
- mpn_lshift (fp, &zp[dif], fn, k);
- if (MPFR_UNLIKELY (dif > 0))
- fp[0] |= zp[dif - 1] >> (GMP_NUMB_BITS - k);
- }
- else
- MPN_COPY (fp, zp + dif, fn);
-
- /* Compute Rounding Bit and Sticky Bit */
- MPFR_UNSIGNED_MINUS_MODULO (sh, MPFR_PREC (f) );
- if (MPFR_LIKELY (sh != 0))
- {
- mp_limb_t mask = MPFR_LIMB_ONE << (sh-1);
- mp_limb_t limb = fp[0];
- rb = limb & mask;
- sb = limb & (mask-1);
- ulp = 2*mask;
- fp[0] = limb & ~(ulp-1);
- }
- else /* sh == 0 */
- {
- mp_limb_t mask = MPFR_LIMB_ONE << (GMP_NUMB_BITS - 1 - k);
- if (MPFR_UNLIKELY (dif > 0))
- {
- rb = zp[--dif] & mask;
- sb = zp[dif] & (mask-1);
- }
- else
- rb = sb = 0;
- k = 0;
- ulp = MPFR_LIMB_ONE;
- }
- if (MPFR_UNLIKELY (sb == 0 && dif > 0))
- {
- sb = zp[--dif];
- if (MPFR_LIKELY (k != 0))
- sb &= MPFR_LIMB_MASK (GMP_NUMB_BITS - k);
- if (MPFR_UNLIKELY (sb == 0) && MPFR_LIKELY (dif > 0))
- do {
- sb = zp[--dif];
- } while (dif > 0 && sb == 0);
- }
-
- /* Rounding */
- if (MPFR_LIKELY (rnd_mode == MPFR_RNDN))
- {
- if (rb == 0 || MPFR_UNLIKELY (sb == 0 && (fp[0] & ulp) == 0))
- goto trunc;
- else
- goto addoneulp;
- }
- else /* Not Nearest */
- {
- if (MPFR_LIKELY (MPFR_IS_LIKE_RNDZ (rnd_mode, sign_z < 0))
- || MPFR_UNLIKELY ( (sb | rb) == 0 ))
- goto trunc;
- else
- goto addoneulp;
- }
-
- trunc:
- inex = - ((sb | rb) != 0);
- goto end;
-
- addoneulp:
- inex = 1;
- if (MPFR_UNLIKELY (mpn_add_1 (fp, fp, fn, ulp)))
- {
- /* Pow 2 case */
- if (MPFR_UNLIKELY (exp == __gmpfr_emax))
- return mpfr_overflow (f, rnd_mode, sign_z);
- exp ++;
- fp[fn-1] = MPFR_LIMB_HIGHBIT;
- }
- end:
- (void) 0;
- }
- else /* dif < 0: Mantissa F is strictly bigger than z's one */
- {
- if (MPFR_LIKELY (k != 0))
- mpn_lshift (fp - dif, zp, zn, k);
- else
- MPN_COPY (fp - dif, zp, zn);
- /* fill with zeroes */
- MPN_ZERO (fp, -dif);
- inex = 0; /* result is exact */
- }
-
- if (MPFR_UNLIKELY (exp < __gmpfr_emin))
- {
- if (rnd_mode == MPFR_RNDN && inex == 0 && mpfr_powerof2_raw (f))
- rnd_mode = MPFR_RNDZ;
- return mpfr_underflow (f, rnd_mode, sign_z);
- }
-
- MPFR_SET_EXP (f, exp);
- MPFR_SET_SIGN (f, sign_z);
- MPFR_RET (inex*sign_z);
-}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/set_zero.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/set_zero.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/set_zero.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
-/* mpfr_set_zero -- set a number to plus or minus zero.
+/* mpfr_set_zero -- set a number to positive or negative zero.
-Copyright 2009-2022 Free Software Foundation, Inc.
+Copyright 2009-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/setmax.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/setmax.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/setmax.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_setmax -- maximum representable floating-point number (raw version)
-Copyright 2002-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2002-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/setmin.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/setmin.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/setmin.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_setmin -- minimum representable floating-point number (raw version)
-Copyright 2002-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2002-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/setsign.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/setsign.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/setsign.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_setsign -- Produce a value with the magnitude of x and sign bit s
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -26,5 +26,14 @@
int
mpfr_setsign (mpfr_ptr z, mpfr_srcptr x, int s, mpfr_rnd_t rnd_mode)
{
- return mpfr_set4 (z, x, rnd_mode, s ? -1 : 1);
+ if (MPFR_UNLIKELY (z != x))
+ return mpfr_set4 (z, x, rnd_mode, s ? MPFR_SIGN_NEG : MPFR_SIGN_POS);
+ else
+ {
+ MPFR_SET_SIGN (z, s ? MPFR_SIGN_NEG : MPFR_SIGN_POS);
+ if (MPFR_UNLIKELY (MPFR_IS_NAN (x)))
+ MPFR_RET_NAN;
+ else
+ MPFR_RET (0);
+ }
}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sgn.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sgn.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sgn.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sgn -- Sign of a floating point number.
-Copyright 2003-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/si_op.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/si_op.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/si_op.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -5,7 +5,7 @@
mpfr_div_si -- divide a floating-point number by a machine integer
mpfr_si_div -- divide a machine number by a floating-point number
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/signbit.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/signbit.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/signbit.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_signbit -- Signbit of a MPFR number
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sin.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sin.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sin.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sin -- sine of a floating-point number
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -99,8 +99,13 @@
m += err1;
}
- mpfr_init (c);
- mpfr_init (xr);
+ if (expx >= 2)
+ {
+ mpfr_init2 (c, expx + m - 1);
+ mpfr_init2 (xr, m);
+ }
+ else
+ mpfr_init2 (c, m);
MPFR_ZIV_INIT (loop, m);
for (;;)
@@ -107,6 +112,9 @@
{
/* first perform argument reduction modulo 2*Pi (if needed),
also helps to determine the sign of sin(x) */
+ /* TODO: Perform range reduction in a way so that the sine can
+ be computed directly from the cosine with sin(x)=cos(pi/2-x),
+ without the need of sqrt(1 - x^2). */
if (expx >= 2) /* If Pi < x < 4, we need to reduce too, to determine
the sign of sin(x). For 2 <= |x| < Pi, we could avoid
the reduction. */
@@ -193,7 +201,8 @@
within the target precision, but in that case mpfr_can_round will fail */
mpfr_clear (c);
- mpfr_clear (xr);
+ if (expx >= 2)
+ mpfr_clear (xr);
end:
MPFR_SAVE_EXPO_FREE (expo);
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sin_cos.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sin_cos.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sin_cos.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sin_cos -- sine and cosine of a floating-point number
-Copyright 2002-2022 Free Software Foundation, Inc.
+Copyright 2002-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -131,8 +131,8 @@
return mpfr_sincos_fast (y, z, x, rnd_mode);
}
- mpfr_init (c);
- mpfr_init (xr);
+ mpfr_init2 (c, m);
+ mpfr_init2 (xr, m);
MPFR_ZIV_INIT (loop, m);
for (;;)
@@ -141,6 +141,7 @@
if (expx >= 2) /* reduce the argument */
{
reduce = 1;
+ MPFR_ASSERTN (expx + m - 1 <= MPFR_PREC_MAX);
mpfr_set_prec (c, expx + m - 1);
mpfr_set_prec (xr, m);
mpfr_const_pi (c, MPFR_RNDN);
@@ -177,9 +178,10 @@
if (!MPFR_CAN_ROUND (c, err, MPFR_PREC (z), rnd_mode))
goto next_step;
- /* we can't set z now, because in case z = x, and the MPFR_CAN_ROUND()
- call below fails, we will have clobbered the input */
- mpfr_set_prec (xr, MPFR_PREC(c));
+ /* We can't set z now, because in case z = x, and the MPFR_CAN_ROUND()
+ call below fails, we will have clobbered the input.
+ Note: m below is the precision of c; see above. */
+ mpfr_set_prec (xr, m);
mpfr_swap (xr, c); /* save the approximation of the cosine in xr */
mpfr_sqr (c, xr, MPFR_RNDU); /* the absolute error is bounded by
2^(5-m) if reduce=1, and by 2^(2-m)
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sinh.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sinh.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sinh.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sinh -- hyperbolic sine
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sinh_cosh.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sinh_cosh.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sinh_cosh.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sinh_cosh -- hyperbolic sine and cosine
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/sinu.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sinu.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sinu.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,240 @@
+/* mpfr_sinu -- sinu(x) = sin(2*pi*x/u)
+ mpfr_sinpi -- sinpi(x) = sin(pi*x)
+
+Copyright 2020-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#include "mpfr-impl.h"
+
+/* References:
+ * Steve Kargl wrote sinpi and friends for FreeBSD's libm under BSD
+ license:
+ https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=218514
+ */
+
+/* put in y the correctly rounded value of sin(2*pi*x/u) */
+int
+mpfr_sinu (mpfr_ptr y, mpfr_srcptr x, unsigned long u, mpfr_rnd_t rnd_mode)
+{
+ mpfr_srcptr xp;
+ mpfr_prec_t precy, prec;
+ mpfr_exp_t expx, expt, err;
+ mpfr_t t, xr;
+ int inexact = 0, nloops = 0, underflow = 0;
+ MPFR_ZIV_DECL (loop);
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ MPFR_LOG_FUNC (
+ ("x[%Pu]=%.*Rg u=%lu rnd=%d", mpfr_get_prec (x), mpfr_log_prec, x, u,
+ rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ inexact));
+
+ if (u == 0 || MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
+ {
+ /* for u=0, return NaN */
+ if (u == 0 || MPFR_IS_NAN (x) || MPFR_IS_INF (x))
+ {
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+ else /* x is zero */
+ {
+ MPFR_ASSERTD (MPFR_IS_ZERO (x));
+ MPFR_SET_ZERO (y);
+ MPFR_SET_SAME_SIGN (y, x);
+ MPFR_RET (0);
+ }
+ }
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ /* Range reduction. We do not need to reduce the argument if it is
+ already reduced (|x| < u).
+ Note that the case |x| = u is better in the "else" branch as it
+ will give xr = 0. */
+ if (mpfr_cmpabs_ui (x, u) < 0)
+ {
+ xp = x;
+ }
+ else
+ {
+ mpfr_exp_t p = MPFR_GET_PREC (x) - MPFR_GET_EXP (x);
+ int inex;
+
+ /* Let's compute xr = x mod u, with signbit(xr) = signbit(x), which
+ may be important when x is a multiple of u, in which case xr = 0
+ (but this property is actually not needed in the code below).
+ The precision of xr is chosen to ensure that x mod u is exactly
+ representable in xr, e.g., the maximum size of u + the length of
+ the fractional part of x. Note that since |x| >= u in this branch,
+ the additional memory amount will not be more than the one of x.
+ */
+ mpfr_init2 (xr, sizeof (unsigned long) * CHAR_BIT + (p < 0 ? 0 : p));
+ MPFR_DBGRES (inex = mpfr_fmod_ui (xr, x, u, MPFR_RNDN)); /* exact */
+ MPFR_ASSERTD (inex == 0);
+ if (MPFR_IS_ZERO (xr))
+ {
+ mpfr_clear (xr);
+ MPFR_SAVE_EXPO_FREE (expo);
+ MPFR_SET_ZERO (y);
+ MPFR_SET_SAME_SIGN (y, x);
+ MPFR_RET (0);
+ }
+ xp = xr;
+ }
+
+ /* now |xp/u| < 1 */
+
+ precy = MPFR_GET_PREC (y);
+ expx = MPFR_GET_EXP (xp);
+ /* For x large, since argument reduction is expensive, we want to avoid
+ any failure in Ziv's strategy, thus we take into account expx too. */
+ prec = precy + MAX(expx, MPFR_INT_CEIL_LOG2 (precy)) + 8;
+ MPFR_ASSERTD(prec >= 2);
+ mpfr_init2 (t, prec);
+ MPFR_ZIV_INIT (loop, prec);
+ for (;;)
+ {
+ nloops ++;
+ /* In the error analysis below, xp stands for x.
+ We first compute an approximation t of 2*pi*x/u, then call sin(t).
+ If t = 2*pi*x/u + s, then |sin(t) - sin(2*pi*x/u)| <= |s|. */
+ mpfr_set_prec (t, prec);
+ mpfr_const_pi (t, MPFR_RNDN); /* t = pi * (1 + theta1) where
+ |theta1| <= 2^-prec */
+ mpfr_mul_2ui (t, t, 1, MPFR_RNDN); /* t = 2*pi * (1 + theta1) */
+ mpfr_mul (t, t, xp, MPFR_RNDN); /* t = 2*pi*x * (1 + theta2)^2 where
+ |theta2| <= 2^-prec */
+ mpfr_div_ui (t, t, u, MPFR_RNDN); /* t = 2*pi*x/u * (1 + theta3)^3 where
+ |theta3| <= 2^-prec */
+ /* if t is zero here, it means the division by u underflows, then
+ sin(t) also underflows, since |sin(x)| <= |x|. */
+ if (MPFR_UNLIKELY (MPFR_IS_ZERO (t)))
+ {
+ inexact = mpfr_underflow (y, rnd_mode, MPFR_SIGN(t));
+ MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, MPFR_FLAGS_INEXACT
+ | MPFR_FLAGS_UNDERFLOW);
+ underflow = 1;
+ goto end;
+ }
+ /* since prec >= 2, |(1 + theta3)^3 - 1| <= 4*theta3 <= 2^(2-prec) */
+ expt = MPFR_GET_EXP (t);
+ /* we have |s| <= 2^(expt + 2 - prec) */
+ mpfr_sin (t, t, MPFR_RNDA);
+ /* t cannot be zero here, since we excluded t=0 before, which is the
+ only exact case where sin(t)=0, and we round away from zero */
+ err = expt + 2 - prec;
+ expt = MPFR_GET_EXP (t); /* new exponent of t */
+ /* the total error is bounded by 2^err + ulp(t) = 2^err + 2^(expt-prec)
+ thus if err <= expt-prec, it is bounded by 2^(expt-prec+1),
+ otherwise it is bounded by 2^(err+1). */
+ err = (err <= expt - prec) ? expt - prec + 1 : err + 1;
+ /* normalize err for mpfr_can_round */
+ err = expt - err;
+ if (MPFR_CAN_ROUND (t, err, precy, rnd_mode))
+ break;
+ /* Check exact cases only after the first level of Ziv' strategy, to
+ avoid slowing down the average case. Exact cases are:
+ (a) 2*pi*x/u is a multiple of pi/2, i.e., x/u is a multiple of 1/4
+ (b) 2*pi*x/u is +/-pi/6 modulo pi, i.e., x/u = +/-1/12 mod 1/2 */
+ if (nloops == 1)
+ {
+ /* detect case (a) */
+ inexact = mpfr_div_ui (t, xp, u, MPFR_RNDA);
+ mpfr_mul_2ui (t, t, 2, MPFR_RNDA);
+ if (inexact == 0 && mpfr_integer_p (t))
+ {
+ if (!mpfr_odd_p (t))
+ /* t is even: we have a multiple of pi, thus sinu = 0,
+ for the sign, we follow IEEE 754-2019: sinPi(+n) is +0
+ and sinPi(-n) is -0 for positive integers n, so that the
+ function is odd. */
+ mpfr_set_zero (y, MPFR_IS_POS(t) ? +1 : -1);
+ else /* t is odd */
+ {
+ inexact = mpfr_sub_ui (t, t, 1, MPFR_RNDZ);
+ MPFR_ASSERTD(inexact == 0);
+ inexact = mpfr_div_2ui (t, t, 1, MPFR_RNDZ);
+ MPFR_ASSERTD(inexact == 0);
+ if (MPFR_IS_ZERO (t) || !mpfr_odd_p (t))
+ /* case pi/2: sinu = 1 */
+ mpfr_set_ui (y, 1, MPFR_RNDZ);
+ else
+ mpfr_set_si (y, -1, MPFR_RNDZ);
+ }
+ goto end;
+ }
+ /* detect case (b): this can only occur if u is divisible by 3 */
+ if ((u % 3) == 0)
+ {
+ inexact = mpfr_div_ui (t, xp, u / 3, MPFR_RNDZ);
+ /* t should be +/-1/4 mod 3/2 */
+ mpfr_mul_2ui (t, t, 2, MPFR_RNDZ);
+ /* t should be +/-1 mod 6, i.e., in {1,5,7,11} mod 12:
+ t = 1 mod 6: case pi/6: return 1/2
+ t = 5 mod 6: case 5pi/6: return 1/2
+ t = 7 mod 6: case 7pi/6: return -1/2
+ t = 11 mod 6: case 11pi/6: return -1/2 */
+ if (inexact == 0 && mpfr_integer_p (t))
+ {
+ mpz_t z;
+ unsigned long mod12;
+ mpz_init (z);
+ inexact = mpfr_get_z (z, t, MPFR_RNDZ);
+ MPFR_ASSERTN(inexact == 0);
+ mod12 = mpz_fdiv_ui (z, 12);
+ mpz_clear (z);
+ if (mod12 == 1 || mod12 == 5)
+ {
+ mpfr_set_ui_2exp (y, 1, -1, MPFR_RNDZ);
+ goto end;
+ }
+ else if (mod12 == 7 || mod12 == 11)
+ {
+ mpfr_set_si_2exp (y, -1, -1, MPFR_RNDZ);
+ goto end;
+ }
+ }
+ }
+ }
+ MPFR_ZIV_NEXT (loop, prec);
+ }
+ MPFR_ZIV_FREE (loop);
+
+ inexact = mpfr_set (y, t, rnd_mode);
+
+ end:
+ mpfr_clear (t);
+ if (xp != x)
+ {
+ MPFR_ASSERTD (xp == xr);
+ mpfr_clear (xr);
+ }
+ MPFR_SAVE_EXPO_FREE (expo);
+ return underflow ? inexact : mpfr_check_range (y, inexact, rnd_mode);
+}
+
+int
+mpfr_sinpi (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ return mpfr_sinu (y, x, 2, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sparc64/mparam.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sparc64/mparam.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sparc64/mparam.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Various Thresholds of MPFR, not exported. -*- mode: C -*-
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sqr.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sqr.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sqr.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sqr -- Floating-point square
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sqrt.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sqrt.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sqrt.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sqrt -- square root of a floating-point number
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sqrt_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sqrt_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sqrt_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sqrt_ui -- square root of a machine integer
-Copyright 2000-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2000-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -26,10 +26,16 @@
int
mpfr_sqrt_ui (mpfr_ptr r, unsigned long u, mpfr_rnd_t rnd_mode)
{
- if (u)
+ int inex;
+
+ MPFR_LOG_FUNC
+ (("u=%lu rnd=%d", u, rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d",
+ mpfr_get_prec(r), mpfr_log_prec, r, inex));
+
+ if (u != 0)
{
mpfr_t uu;
- int inex;
#ifdef MPFR_LONG_WITHIN_LIMB
mp_limb_t up[1];
int cnt;
@@ -54,7 +60,8 @@
mpfr_clear (uu);
#endif /* MPFR_LONG_WITHIN_LIMB */
MPFR_SAVE_EXPO_FREE (expo);
- return mpfr_check_range (r, inex, rnd_mode);
+ inex = mpfr_check_range (r, inex, rnd_mode);
+ return inex;
}
else /* sqrt(0) = 0 */
{
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/stack_interface.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/stack_interface.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/stack_interface.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* custom interface -- initialize a floating-point number with given
allocation area
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/strtofr.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/strtofr.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/strtofr.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_strtofr -- set a floating-point number from a string
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sub.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sub.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sub.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sub -- subtract two floating-point numbers
-Copyright 2001-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2001-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sub1.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sub1.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sub1.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sub1 -- internal function to perform a "real" subtraction
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sub1sp.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sub1sp.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sub1sp.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_sub1sp -- internal function to perform a "real" subtraction
All the op must have the same precision
-Copyright 2003-2022 Free Software Foundation, Inc.
+Copyright 2003-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sub1sp1_extracted.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sub1sp1_extracted.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sub1sp1_extracted.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -4,7 +4,7 @@
Source: https://github.com/project-everest/hacl-star/tree/dev_mpfr/code/mpfr
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sub_d.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sub_d.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sub_d.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_sub_d -- subtract a machine double precision float from
a multiple precision floating-point number
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sub_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sub_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sub_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_sub_ui -- subtract a floating-point number and a machine integer
-Copyright 2000-2022 Free Software Foundation, Inc.
+Copyright 2000-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/subnormal.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/subnormal.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/subnormal.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_subnormalize -- Subnormalize a floating point number
emulating sub-normal numbers.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -32,7 +32,7 @@
1 | 0 | -1 | AddOneUlp |
1 | 1 | ? | AddOneUlp |
- For other rounding mode, there isn't such a problem.
+ For other rounding modes, there isn't such a problem.
Just round it again and merge the ternary values.
Set the inexact flag if the returned ternary value is non-zero.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/sum.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/sum.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/sum.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Sum -- efficiently sum a list of floating-point numbers
-Copyright 2014-2022 Free Software Foundation, Inc.
+Copyright 2014-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/swap.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/swap.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/swap.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_swap (U, V) -- Swap U and V.
-Copyright 2000-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2000-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/tan.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/tan.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/tan.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_tan -- tangent of a floating-point number
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/tanh.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/tanh.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/tanh.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_tanh -- hyperbolic tangent
-Copyright 2001-2022 Free Software Foundation, Inc.
+Copyright 2001-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Added: trunk/Build/source/libs/mpfr/mpfr-src/src/tanu.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/tanu.c (rev 0)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/tanu.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -0,0 +1,227 @@
+/* mpfr_tanu -- tanu(x) = tan(2*pi*x/u)
+ mpfr_tanpi -- tanpi(x) = tan(pi*x)
+
+Copyright 2020-2023 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#define MPFR_NEED_LONGLONG_H
+#include "mpfr-impl.h"
+
+/* put in y the correctly rounded value of tan(2*pi*x/u) */
+int
+mpfr_tanu (mpfr_ptr y, mpfr_srcptr x, unsigned long u, mpfr_rnd_t rnd_mode)
+{
+ mpfr_srcptr xp;
+ mpfr_prec_t precy, prec;
+ mpfr_exp_t expx, expt, err;
+ mpfr_t t, xr;
+ int inexact = 0, nloops = 0, underflow = 0;
+ MPFR_ZIV_DECL (loop);
+ MPFR_SAVE_EXPO_DECL (expo);
+
+ MPFR_LOG_FUNC (
+ ("x[%Pu]=%.*Rg u=%lu rnd=%d", mpfr_get_prec (x), mpfr_log_prec, x, u,
+ rnd_mode),
+ ("y[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (y), mpfr_log_prec, y,
+ inexact));
+
+ if (u == 0 || MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
+ {
+ /* for u=0, return NaN */
+ if (u == 0 || MPFR_IS_NAN (x) || MPFR_IS_INF (x))
+ {
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+ else /* x is zero */
+ {
+ MPFR_ASSERTD (MPFR_IS_ZERO (x));
+ MPFR_SET_ZERO (y);
+ MPFR_SET_SAME_SIGN (y, x);
+ MPFR_RET (0);
+ }
+ }
+
+ MPFR_SAVE_EXPO_MARK (expo);
+
+ /* Range reduction. We do not need to reduce the argument if it is
+ already reduced (|x| < u).
+ Note that the case |x| = u is better in the "else" branch as it
+ will give xr = 0. */
+ if (mpfr_cmpabs_ui (x, u) < 0)
+ {
+ xp = x;
+ }
+ else
+ {
+ mpfr_exp_t p = MPFR_GET_PREC (x) - MPFR_GET_EXP (x);
+ int inex;
+
+ /* Let's compute xr = x mod u, with signbit(xr) = signbit(x), which
+ may be important when x is a multiple of u, in which case xr = 0
+ (but this property is actually not needed in the code below).
+ The precision of xr is chosen to ensure that x mod u is exactly
+ representable in xr, e.g., the maximum size of u + the length of
+ the fractional part of x. Note that since |x| >= u in this branch,
+ the additional memory amount will not be more than the one of x.
+ Note that due to the rules on the special values, we needed to
+ consider a period of u instead of u/2. */
+ mpfr_init2 (xr, sizeof (unsigned long) * CHAR_BIT + (p < 0 ? 0 : p));
+ MPFR_DBGRES (inex = mpfr_fmod_ui (xr, x, u, MPFR_RNDN)); /* exact */
+ MPFR_ASSERTD (inex == 0);
+ if (MPFR_IS_ZERO (xr))
+ {
+ mpfr_clear (xr);
+ MPFR_SAVE_EXPO_FREE (expo);
+ MPFR_SET_ZERO (y);
+ MPFR_SET_SAME_SIGN (y, x);
+ MPFR_RET (0);
+ }
+ xp = xr;
+ }
+
+ /* now |xp/u| < 1 */
+
+ precy = MPFR_GET_PREC (y);
+ expx = MPFR_GET_EXP (xp);
+ /* For x large, since argument reduction is expensive, we want to avoid
+ any failure in Ziv's strategy, thus we take into account expx too. */
+ prec = precy + MAX(expx,MPFR_INT_CEIL_LOG2(precy)) + 8;
+ MPFR_ASSERTD(prec >= 2);
+ mpfr_init2 (t, prec);
+ MPFR_ZIV_INIT (loop, prec);
+ for (;;)
+ {
+ int inex;
+ nloops ++;
+ /* In the error analysis below, xp stands for x.
+ We first compute an approximation t of 2*pi*x/u, then call tan(t).
+ If t = 2*pi*x/u + s, then
+ |tan(t) - tan(2*pi*x/u)| = |s| * (1 + tan(v)^2) where v is in the
+ interval [t, t+s]. If we ensure that |t| >= |2*pi*x/u|, since tan() is
+ increasing, we can bound tan(v)^2 by tan(t)^2. */
+ mpfr_set_prec (t, prec);
+ mpfr_const_pi (t, MPFR_RNDU); /* t = pi * (1 + theta1) where
+ |theta1| <= 2^(1-prec) */
+ mpfr_mul_2ui (t, t, 1, MPFR_RNDN); /* t = 2*pi * (1 + theta1) */
+ mpfr_mul (t, t, xp, MPFR_RNDA); /* t = 2*pi*x * (1 + theta2)^2 where
+ |theta2| <= 2^(1-prec) */
+ inex = mpfr_div_ui (t, t, u, MPFR_RNDN);
+ /* t = 2*pi*x/u * (1 + theta3)^3 where |theta3| <= 2^(1-prec) */
+ /* if t is zero here, it means the division by u underflows, then
+ tan(t) also underflows, since |tan(x)| <= |x|. */
+ if (MPFR_UNLIKELY (MPFR_IS_ZERO (t)))
+ {
+ inexact = mpfr_underflow (y, rnd_mode, MPFR_SIGN(t));
+ MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, MPFR_FLAGS_INEXACT
+ | MPFR_FLAGS_UNDERFLOW);
+ underflow = 1;
+ goto end;
+ }
+ /* emulate mpfr_div_ui (t, t, u, MPFR_RNDA) above, so that t is rounded
+ away from zero */
+ if (MPFR_SIGN(t) > 0 && inex < 0)
+ mpfr_nextabove (t);
+ else if (MPFR_SIGN(t) < 0 && inex > 0)
+ mpfr_nextbelow (t);
+ expt = MPFR_GET_EXP (t);
+ /* since prec >= 3, |(1 + theta3)^3 - 1| <= 4*theta3 <= 2^(3-prec)
+ thus |s| = |t - 2*pi*x/u| <= |t| * 2^(3-prec) */
+ mpfr_tan (t, t, MPFR_RNDA);
+ {
+ /* compute an upper bound for 1+tan(t)^2 */
+ mpfr_t z;
+ mpfr_init2 (z, 64);
+ mpfr_sqr (z, t, MPFR_RNDU);
+ mpfr_add_ui (z, z, 1, MPFR_RNDU);
+ expt += MPFR_GET_EXP (z);
+ /* now |t - tan(2*pi*x/u)| <= ulp(t) + 2^(expt + 3 - prec) */
+ mpfr_clear (z);
+ }
+ /* t cannot be zero here, since we excluded t=0 before, which is the
+ only exact case where tan(t)=0, and we round away from zero */
+ err = expt + 3 - prec;
+ expt = MPFR_GET_EXP (t); /* new exponent of t */
+ /* the total error is bounded by 2^err + ulp(t) = 2^err + 2^(expt-prec)
+ thus if err <= expt-prec, it is bounded by 2^(expt-prec+1),
+ otherwise it is bounded by 2^(err+1). */
+ err = (err <= expt - prec) ? expt - prec + 1 : err + 1;
+ /* normalize err for mpfr_can_round */
+ err = expt - err;
+ if (MPFR_CAN_ROUND (t, err, precy, rnd_mode))
+ break;
+ /* Check exact cases only after the first level of Ziv' strategy, to
+ avoid slowing down the average case. Exact cases are when 2*pi*x/u
+ is a multiple of pi/4, i.e., x/u a multiple of 1/8:
+ (a) x/u = {0,1/2} mod 1: return +0 or -0
+ (b) x/u = {1/4,3/4} mod 1: return +Inf or -Inf
+ (c) x/u = {1/8,3/8,5/8,7/8} mod 1: return 1 or -1 */
+ if (nloops == 1)
+ {
+ inexact = mpfr_div_ui (t, xp, u, MPFR_RNDA);
+ mpfr_mul_2ui (t, t, 3, MPFR_RNDA);
+ if (inexact == 0 && mpfr_integer_p (t))
+ {
+ mpz_t z;
+ unsigned long mod8;
+ mpz_init (z);
+ inexact = mpfr_get_z (z, t, MPFR_RNDZ);
+ MPFR_ASSERTN(inexact == 0);
+ mod8 = mpz_fdiv_ui (z, 8);
+ mpz_clear (z);
+ if (mod8 == 0 || mod8 == 4) /* case (a) */
+ mpfr_set_zero (y, ((mod8 == 0) ? +1 : -1) * MPFR_SIGN (x));
+ else if (mod8 == 2 || mod8 == 6) /* case (b) */
+ {
+ mpfr_set_inf (y, (mod8 == 2) ? +1 : -1);
+ MPFR_SAVE_EXPO_UPDATE_FLAGS (expo, MPFR_FLAGS_DIVBY0);
+ }
+ else /* case (c) */
+ {
+ if (mod8 == 1 || mod8 == 5)
+ mpfr_set_ui (y, 1, rnd_mode);
+ else
+ mpfr_set_si (y, -1, rnd_mode);
+ }
+ goto end;
+ }
+ }
+ MPFR_ZIV_NEXT (loop, prec);
+ }
+ MPFR_ZIV_FREE (loop);
+
+ inexact = mpfr_set (y, t, rnd_mode);
+
+ end:
+ mpfr_clear (t);
+ if (xp != x)
+ {
+ MPFR_ASSERTD (xp == xr);
+ mpfr_clear (xr);
+ }
+ MPFR_SAVE_EXPO_FREE (expo);
+ return underflow ? inexact : mpfr_check_range (y, inexact, rnd_mode);
+}
+
+int
+mpfr_tanpi (mpfr_ptr y, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
+{
+ return mpfr_tanu (y, x, 2, rnd_mode);
+}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/total_order.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/total_order.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/total_order.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_total_order_p -- total order of two floating-point numbers
-Copyright 2018-2022 Free Software Foundation, Inc.
+Copyright 2018-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/ubf.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/ubf.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/ubf.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Functions to work with unbounded floats (limited low-level interface).
-Copyright 2016-2022 Free Software Foundation, Inc.
+Copyright 2016-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -149,9 +149,15 @@
}
else
{
- u = (bn >= cn) ?
- mpn_mul (ap, MPFR_MANT (b), bn, MPFR_MANT (c), cn) :
- mpn_mul (ap, MPFR_MANT (c), cn, MPFR_MANT (b), bn);
+ if (b == c)
+ {
+ mpn_sqr (ap, MPFR_MANT (b), bn);
+ u = ap[2 * bn - 1];
+ }
+ else
+ u = (bn >= cn) ?
+ mpn_mul (ap, MPFR_MANT (b), bn, MPFR_MANT (c), cn) :
+ mpn_mul (ap, MPFR_MANT (c), cn, MPFR_MANT (b), bn);
if (MPFR_LIMB_MSB (u) == 0)
{
m = 1;
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/uceil_exp2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/uceil_exp2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/uceil_exp2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* __gmpfr_ceil_exp2 - returns y >= 2^d
-Copyright 1999-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/uceil_log2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/uceil_log2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/uceil_log2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* __gmpfr_ceil_log2 - returns ceil(log(d)/log(2))
-Copyright 1999-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/ufloor_log2.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/ufloor_log2.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/ufloor_log2.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* __gmpfr_floor_log2 - returns floor(log(d)/log(2))
-Copyright 1999-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 1999-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/ui_div.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/ui_div.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/ui_div.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_ui_div -- divide a machine integer by a floating-point number
-Copyright 2000-2022 Free Software Foundation, Inc.
+Copyright 2000-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/ui_pow.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/ui_pow.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/ui_pow.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_ui_pow -- power of n function n^x
-Copyright 2001-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2001-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/ui_pow_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/ui_pow_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/ui_pow_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_ui_pow_ui -- compute the power between two machine integers
-Copyright 1999-2022 Free Software Foundation, Inc.
+Copyright 1999-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/ui_sub.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/ui_sub.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/ui_sub.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_ui_sub -- subtract a floating-point number from an integer
-Copyright 2000-2022 Free Software Foundation, Inc.
+Copyright 2000-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/urandom.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/urandom.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/urandom.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -2,7 +2,7 @@
real number between 0 and 1 (exclusive) and round it to the precision of rop
according to the given rounding mode.
-Copyright 2000-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2000-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/urandomb.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/urandomb.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/urandomb.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -3,7 +3,7 @@
using STATE as the random state previously initialized by a call to
gmp_randinit_lc_2exp_size().
-Copyright 2000-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2000-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/vasprintf.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/vasprintf.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/vasprintf.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_vasnprintf_aux -- helper function for the formatted output functions
(printf functions family).
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -121,12 +121,22 @@
/* Read an integer var of type mpfr_intmax_t. In case of overflow, set
overflow to 1.
+ The variable var must be 0 on input. If there are no digits, it is
+ left to 0.
+ This macro will be used to read the field width and the precision.
+ The behavior will be similar to ISO C99. Note that unless "*" is
+ used, the result will be non-negative (ISO C99 and C11 just specify
+ "optional decimal integer" for the precision, but the behavior with
+ a hardcoded negative integer is not explicitly defined, thus it is
+ undefined, so that it is fine to reject such integers; the C2x draft
+ now clarifies this: "an optional non-negative decimal integer").
Note: Since mpfr_intmax_t = int is theoretically possible, all values
of var are potentially valid values (via '*'). Hence the need of an
overflow flag instead of a special value that would indicate overflow.
- Saturating would not be OK either as the maximum value could be
+ Just saturating would not be OK either as the maximum value could be
meaningful with %jn and/or in the case mpfr_intmax_t = int, for
- MPFR_PREC_ARG.
+ MPFR_PREC_ARG, i.e. one must be able to distinguish the maximum value
+ from an overflow.
*/
#define READ_INT(ap, format, var) \
do { \
@@ -902,6 +912,8 @@
/* For a real non zero number x, what is the base exponent f when rounding x
with rounding mode r to r(x) = m*b^f, where m is a digit and 1 <= m < b ?
Return non zero value if x is rounded up to b^f, return zero otherwise */
+/* FIXME: It seems that the base-2 exponent is taken into account, which is
+ what is expected. In this case, the description is incorrect. */
static int
next_base_power_p (mpfr_srcptr x, int base, mpfr_rnd_t rnd)
{
@@ -1021,7 +1033,29 @@
/* Determine the different parts of the string representation of the regular
number P when spec.spec is 'a', 'A', or 'b'.
- Return -1 in case of overflow on the sizes. */
+ Return -1 in case of overflow on the sizes.
+
+ Note for 'a'/'A': If the precision field is non-zero, the output is the
+ one with a binary exponent that is a multiple of 4 (thus this is similar
+ to base 16, where base-16 exponent = binary exponent / 4). But if the
+ precision field is 0, the exponent is no longer restricted to a multiple
+ of 4; the precision is maximized, but the displayed digit may be 1; this
+ is completely unintuitive.
+ The obtained output for 4 values with precision fields 0 and 1:
+ 0 1
+ 30 0xfp+1 0x1.ep+4
+ 31 0x1p+5 0x1.fp+4
+ 32 0x8p+2 0x2.0p+4
+ 33 0x8p+2 0x2.1p+4
+ First, the output for numbers that round up to the next power of 16
+ with a precision field 0, like 31 here, has an unexpected form: here
+ with 31, "0x1p+5" instead of "0x8p+2".
+ Moreover, if one increases the output precision, the output form
+ changes (even if no rounding is involved). For instance, for 32,
+ "0x8p+2" changes to "0x2.0p+4" instead of "0x8.0p+2".
+ FIXME: choose first digit = always 1. Discussion:
+ https://sympa.inria.fr/sympa/arc/mpfr/2021-05/msg00002.html
+*/
static int
regular_ab (struct number_parts *np, mpfr_srcptr p,
const struct printf_spec spec)
@@ -2144,13 +2178,16 @@
if (*fmt == '.')
{
- const char *f = ++fmt;
+ ++fmt;
READ_INT (ap, fmt, spec.prec);
- if (f == fmt || spec.prec < 0)
+ /* A negative value is possible with ".*" and it will be regarded
+ as a missing precision (ISO C). We need to make sure that such
+ a value is representable in an int (see its use below). */
+ if (spec.prec < 0)
spec.prec = -1;
}
else
- spec.prec = -1;
+ spec.prec = -1; /* missing precision */
MPFR_ASSERTD (spec.prec >= -1);
fmt = parse_arg_type (fmt, &spec);
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/version.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/version.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/version.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_get_version -- MPFR version
-Copyright 2004-2022 Free Software Foundation, Inc.
+Copyright 2004-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -25,5 +25,5 @@
const char *
mpfr_get_version (void)
{
- return "4.1.1";
+ return "4.2.0";
}
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/volatile.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/volatile.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/volatile.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -4,7 +4,7 @@
CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN
FUTURE MPFR RELEASES.
-Copyright 2003-2004, 2006-2022 Free Software Foundation, Inc.
+Copyright 2003-2004, 2006-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/x86/mparam.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/x86/mparam.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/x86/mparam.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Various Thresholds of MPFR, not exported. -*- mode: C -*-
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/x86_64/core2/mparam.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/x86_64/core2/mparam.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/x86_64/core2/mparam.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Various Thresholds of MPFR, not exported. -*- mode: C -*-
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/x86_64/mparam.h
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/x86_64/mparam.h 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/x86_64/mparam.h 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* Various Thresholds of MPFR, not exported. -*- mode: C -*-
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/yn.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/yn.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/yn.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,7 +1,7 @@
/* mpfr_y0, mpfr_y1, mpfr_yn -- Bessel functions of 2nd kind, integer order.
https://pubs.opengroup.org/onlinepubs/9699919799/functions/y0.html
-Copyright 2007-2022 Free Software Foundation, Inc.
+Copyright 2007-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -324,12 +324,13 @@
mpfr_t y, s1, s2, s3;
MPFR_ZIV_DECL (loop);
- mpfr_init (y);
- mpfr_init (s1);
- mpfr_init (s2);
- mpfr_init (s3);
+ prec = MPFR_PREC(res) + 2 * MPFR_INT_CEIL_LOG2 (MPFR_PREC (res)) + 13;
- prec = MPFR_PREC(res) + 2 * MPFR_INT_CEIL_LOG2 (MPFR_PREC (res)) + 13;
+ mpfr_init2 (y, prec);
+ mpfr_init2 (s1, prec);
+ mpfr_init2 (s2, prec);
+ mpfr_init2 (s3, prec);
+
MPFR_ZIV_INIT (loop, prec);
for (;;)
{
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/zeta.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/zeta.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/zeta.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_zeta -- compute the Riemann Zeta function
-Copyright 2003-2022 Free Software Foundation, Inc.
+Copyright 2003-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
@@ -300,12 +300,16 @@
return inex;
}
+/* TODO: Check the error analysis. The following (undocumented?) one
+ does not take into account the replacement of sin(Pi*s/2) by sinpi(s/2)
+ in commit fd5d811d81f6d1839d4099cc1bb2cde705981648, which could have
+ reduced the error bound since the multiplication by Pi is now exact. */
/* return add = 1 + floor(log(c^3*(13+m1))/log(2))
where c = (1+eps)*(1+eps*max(8,m1)),
m1 = 1 + max(1/eps,2*sd)*(1+eps),
eps = 2^(-precz-14)
sd = abs(s-1)
- */
+*/
static long
compute_add (mpfr_srcptr s, mpfr_prec_t precz)
{
@@ -520,7 +524,7 @@
}
/* Check for case s=1 before changing the exponent range */
- if (mpfr_cmp (s, __gmpfr_one) == 0)
+ if (mpfr_equal_p (s, __gmpfr_one))
{
MPFR_SET_INF (z);
MPFR_SET_POS (z);
@@ -562,7 +566,6 @@
MPFR_ZIV_INIT (loop, prec1);
for (;;)
{
- mpfr_exp_t ey;
mpfr_t z_up;
mpfr_const_pi (p, MPFR_RNDD); /* p is Pi */
@@ -614,7 +617,7 @@
/* Note: it might be that EXP(z_down) = emax here, in that
case we will have overflow below when we multiply by 2 */
mpfr_prec_round (z_up, precz, rnd_mode);
- ok = mpfr_cmp (z_down, z_up) == 0;
+ ok = mpfr_equal_p (z_down, z_up);
mpfr_clear (z_up);
mpfr_clear (z_down);
if (ok)
@@ -642,27 +645,23 @@
mpfr_mul_2ui (z_pre, z_pre, 1, MPFR_RNDN);
/* multiply z_pre by sin(Pi*s/2) */
- mpfr_mul (y, s, p, MPFR_RNDN);
- mpfr_div_2ui (p, y, 1, MPFR_RNDN); /* p = s*Pi/2 */
- /* FIXME: sinpi will be available, we should replace the mpfr_sin
- call below by mpfr_sinpi(s/2), where s/2 will be exact.
- Can mpfr_sin underflow? Moreover, the code below should be
- improved so that the "if" condition becomes unlikely, e.g.
- by taking a slightly larger working precision. */
- mpfr_sin (y, p, MPFR_RNDN); /* y = sin(Pi*s/2) */
- ey = MPFR_GET_EXP (y);
- if (ey < 0) /* take account of cancellation in sin(p) */
- {
- mpfr_t t;
-
- MPFR_ASSERTN (- ey < MPFR_PREC_MAX - prec1);
- mpfr_init2 (t, prec1 - ey);
- mpfr_const_pi (t, MPFR_RNDD);
- mpfr_mul (t, s, t, MPFR_RNDN);
- mpfr_div_2ui (t, t, 1, MPFR_RNDN);
- mpfr_sin (y, t, MPFR_RNDN);
- mpfr_clear (t);
- }
+ mpfr_div_2ui (p, s, 1, MPFR_RNDN); /* p = s/2 */
+ /* Can mpfr_sinpi underflow? While with mpfr_sin, we could not
+ answer in any precision without a theoretical study (though
+ an underflow would have been very unlikely as we have a
+ huge exponent range), with mpfr_sinpi, an underflow could
+ occur only in a huge, unsupported precision. Indeed, if
+ mpfr_sinpi underflows, this means that 0 < |sinpi(s/2)| < m,
+ where m is the minimum representable positive number, and in
+ this case, r being the reduced argument such that |r| <= 1/2,
+ one has |sinpi(r)| > |2r|, so that |2r| < m; this can be
+ possible only if |s/2| > 1/2 (otherwise |s| = |2r| < m and
+ s would not be representable as an MPFR number) and s has
+ non-zero bits of exponent less than the minimum exponent
+ (s/2 - r being an integer), i.e. the precision is at least
+ MPFR_EMAX_MAX + 2. With such a huge precision, there would
+ probably be failures before reaching this point. */
+ mpfr_sinpi (y, p, MPFR_RNDN); /* y = sin(Pi*s/2) */
mpfr_mul (z_pre, z_pre, y, MPFR_RNDN);
if (MPFR_LIKELY (MPFR_CAN_ROUND (z_pre, prec1 - add, precz,
Modified: trunk/Build/source/libs/mpfr/mpfr-src/src/zeta_ui.c
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/src/zeta_ui.c 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/src/zeta_ui.c 2023-01-12 04:40:09 UTC (rev 65526)
@@ -1,6 +1,6 @@
/* mpfr_zeta_ui -- compute the Riemann Zeta function for integer argument.
-Copyright 2005-2022 Free Software Foundation, Inc.
+Copyright 2005-2023 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.
This file is part of the GNU MPFR Library.
Modified: trunk/Build/source/libs/mpfr/mpfr-src/version-ext.sh
===================================================================
--- trunk/Build/source/libs/mpfr/mpfr-src/version-ext.sh 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/mpfr-src/version-ext.sh 2023-01-12 04:40:09 UTC (rev 65526)
@@ -4,7 +4,8 @@
# Git working tree (Git branch or "(none)", total commit count,
# commit id, and whether the current HEAD is modified). It is
# called in tests/Makefile.am for "make check", but may be used
-# by other tools that need such information.
+# by other tools that need such information (other tests may be
+# needed; see tests/Makefile.am as an example of use).
# Note that this does not replace version information found in
# the VERSION file, which may still need to be output in addition
# to the output of this script.
@@ -20,6 +21,15 @@
GREP=${GREP:-grep}
SED=${SED:-sed}
+# Note: for the branch detection, in the case of a detached HEAD state,
+# the commit may appear in multiple branches, i.e. which diverge after
+# the commit; thus we exclude branches created after this commit, based
+# on <branch>-root tags (such a tag should be added by the user when
+# creating a branch, so that "git diff <branch>-root" shows commits done
+# in the branch since its creation, etc.). If $gitb contains multiple
+# branches, this means that something is probably wrong with the tags
+# or the branches (merged branches should be deleted).
+
git tag --contains | $SED -n 's/-root$//p' > excluded-branches
gitb=`git branch --format='%(refname:short)' --contains | \
$SED 's,(HEAD detached at origin/\(.*\)),\1,' | \
Modified: trunk/Build/source/libs/mpfr/version.ac
===================================================================
--- trunk/Build/source/libs/mpfr/version.ac 2023-01-12 00:49:57 UTC (rev 65525)
+++ trunk/Build/source/libs/mpfr/version.ac 2023-01-12 04:40:09 UTC (rev 65526)
@@ -8,4 +8,4 @@
dnl --------------------------------------------------------
dnl
dnl m4-include this file to define the current mpfr version
-m4_define([mpfr_version], [4.1.1])
+m4_define([mpfr_version], [4.2.0])
More information about the tex-live-commits
mailing list.