c#中为什么Math.Sin(180⼀180*Math.PI)=1.22460635382238E-16,而不是0

2025-01-06 06:40:28
推荐回答(1个)
回答1:

Math.Sin(...)返回值的类型为double(双精度浮点数)。
在.net中,double是按IEEE754 标准进行编码的,这是一个国际标准。
问题的原因就是由于double双精度浮点数编码规则所导致精度损失,意思是:double浮点数往往只能近似于精确值。在这里, sin(0)的精确值是0,但用double来表示sin计算结果为1.22460635382238E-16(一个非常接近精确值0的近似数)。
在.net 中,double的精度可以保证位小数点后15位。