gpt4 book ai didi

floating-point - Fortran 中 Sin 和 Cos 函数的精度

转载 作者:行者123 更新时间:2023-12-02 15:02:54 30 4
gpt4 key购买 nike

考虑代码,

PROGRAM TRIG_TEST
IMPLICIT NONE

DOUBLE PRECISION, PARAMETER :: PI=4.D0*DATAN(1.0D)

print *, sin(PI/2.0), cos(PI/2.0)

END PROGRAM TRIG_TEST

使用gfortran 输出编译,

1.0000000000000000 6.1232339957367660E-017

我知道常见的浮点问题,但是为什么 sin 函数完全为 1,而 cos 函数却不完全为零,这是有原因的吗?

最佳答案

以下假定 double 是 IEEE 754 基本 64 位二进制格式。三角函数的常见实现不如格式支持的准确。但是,对于这个答案,我们假设它们返回尽可能准确的结果。

π 无法用 double 精确表示。最接近的可能值是 884279719003555/281474976710656 或 3.141592653589793115997963468544185161590576171875。我们称它为 p

p/2 的正弦约为 1 − 1.8747•10−33double 表示的两个值分别是 1 和 0.99999999999999988897769753748434595763683319091796875,大约是 1 − 1.11•10−16。其中较接近的是 1,因此最接近 p/2 正弦值的可表示值恰好是 1。

p/2 的余弦约为 6.123233995736765886•10−17double 中最接近的值是 6.12323399573676603586882014729198302312846062338790031898128063403419218957424163818359375•10−17

所以你观察到的结果是最接近真实数学值的可能结果。

关于floating-point - Fortran 中 Sin 和 Cos 函数的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48458081/

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