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

该POSIX页面中的tan函数族(tantanftanl)用C说:

如果正确的值会导致溢出,则会发生范围错误,并且 tan()、tanf() 和 tanl() 应分别返回 ±HUGE_VAL、±HUGE_VALF 和 ±HUGE_VALL,其符号与正确的值相同功能。

然而,在实践中是非常困难的实际获得infinity/-infinity在这种情况下,由于浮点数将需要足够接近π/ 2,使得其切线会比该类型的表示的最大浮点值较大.

根据经验,我无法使用标准 glibc 获得这样的结果,即使使用这些nextafter函数来获得最接近 ?/2 的可能值(atan(1) * 2用作“一半?”,并从那里开始,无论是左侧还是右侧)。

对所有(32 位)floats 的详尽测试证实这对于 32 位是正确的,至少在我的库中是这样。测试doubles 和long doubles的 ?/2 附近表明这也是他们的情况。然而,详尽的测试有点太长了:我需要测试 (2k+1)•?/2 的附近,对于 ?k ? ?.

那么,是否有一些数学或实践论证可以让人们得出结论,至少在“合理正确”的库实现中(例如,使用一些测量的 ULP 边界,就像GNU C 库数学函数所做的那样),浮点精度 -点值将始终tan(x)适合这些值的有限表示?换句话说,它tan向无穷大的增长速度不会比我们接近 ?/2 的速度快吗?

请注意,我不包括tan(NAN)tan(INFINITY)从讨论,因为这些记录的角落案件返回NaN的。此外,使用次正规数可能会获得不同的结果,但由于它们只出现在零附近而不是 ?/2 附近,我相信我们可以排除它们。

因此,我正在寻找一些数学论证/证明/详尽的测试来表明这不会发生,或者只是一个反例,它使用任何标准的 C 库实现,这样包含<math.h>和调用tan就可以做到;但不包括具有非标准tan类函数的特定库。

以上是tan(x)=infinity的不可能性证明(或反例),对于浮点值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>