gpt4 book ai didi

c - tan(x) = infinity 的不可能性证明(或反例),对于浮点值

转载 作者:行者123 更新时间:2023-12-04 11:44:51 26 4
gpt4 key购买 nike

POSIX pagetan C 中的函数系列( tantanftanl )说:

If the correct value would cause overflow, a range error shall occur and tan(), tanf(), and tanl() shall return ±HUGE_VAL, ±HUGE_VALF, and ±HUGE_VALL, respectively, with the same sign as the correct value of the function.


但是,在实践中实际获得 infinity是非常困难的。/ -infinity在这种情况下,由于浮点数需要足够接近 π/2,这样它的正切将大于该类型的最大可表示浮点值。
根据经验,即使使用 nextafter,我也无法使用标准 glibc 获得这样的结果。函数以获得最接近 π/2 的可能值(使用 atan(1) * 2 作为“半个 π”,然后从那里开始,无论是向左还是向右)。
所有(32 位)的详尽测试 float s 确认这对于 32 位是正确的,至少在我的库中是这样。测试 double 的 π/2 附近s 和 long double s 表明这也是他们的情况。然而,详尽的测试有点太长了:我需要测试 (2k+1)•π/2 的附近,因为 ∀k ∈ ℤ。
那么,是否有一些数学或实践论证可以让人们得出结论,至少在“合理正确”的库实现中(例如,使用一些测量的 ULP 边界,就像对 GNU C library math functions 所做的那样),浮点值的精度永远是这样的 tan(x)将适合这些值的有限表示吗?换句话说,那个 tan向无穷大增长的速度不会比我们接近 π/2 的速度更快吗?
请注意,我不包括 tan(NAN)tan(INFINITY)从讨论中,因为这些记录了返回 NaN 的极端情况。此外,使用次正规数可能会获得不同的结果,但由于它们只出现在零附近而不是 π/2 附近,我相信我们可以排除它们。
因此,我正在寻找一些数学论证/证明/详尽的测试来表明这不会发生,或者只是一个反例,其中包括任何标准 C 库实现,包括 <math.h>并调用 tan可以;但不包括具有非标准的特定库 tan - 类似的功能。

最佳答案

... is there some mathematical or practical argument that allows one to conclude that, ... the precision of floating-point values will always be such that tan(x) will fit in a finite representation of these values?


π 是一个无理数,正如 some_odd_integer*π/2 - 数学切线的极点(some_radian_measure)。
所有有限浮点值都是有理数。因此没有 double是 π/2 和 tan(some_finite_double) 的整数倍从来都不是极点。 some_odd_n*π/2可能非常接近 double a如 6381956970095103 ∗ 2797。如果为真,则 tan(a)很大。
这是接近 K.C. Ng's "ARGUMENT REDUCTION FOR HUGE ARGUMENTS: Good to the Last Bit" Chapter 2.3 .这大致意味着 some_odd_n*π/2 中大约 2-62 的最接近的大小写差异所有 double .这样的值 a关闭 some_odd_n*π/2 2-62 导致 tan()大约 262 个,在 double 之内范围为 21023。
这个关键点是对于一些FP类型有 tan(a)超过 FP_MAX, a必须非常接近 some_odd_n*π/2 ,按照 log2(FP_MAX) 的顺序。对于更宽的 FP 类型,这种情况不太可能发生,因为精度是线性的,并且范围与位宽呈指数关系。它可能发生在比 binary16 窄的人为 FP 类型中。 .

注: tan()第一步是将参数减少到主要范围 [-π/2...π/2]。 IMO,这比小学更难做好 tan()评估。因此 tan() 的质量(或缺乏)如果值接近 some_odd_n*π/2,实现可能会产生显着更大(且不正确)的结果.

I'm looking for either some mathematical argument/proof/exhaustive test that shows this does not happen,


有关如何确定最坏情况的想法,请参阅上面链接的文章中的“使用与 π 相关的连分数”(引用文献 6)。

关于c - tan(x) = infinity 的不可能性证明(或反例),对于浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67482420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com