C#计算90度余弦值输出-4.371139E-08而非0的原因


复现代码
Console.Write("Enter angle in degrees: "); // 输入角度值为90 float angle = float.Parse(Console.ReadLine()); float radian = angle * (MathF.PI / 180); Console.WriteLine("Sine is " + MathF.Sin(radian) ); // 预期输出 "Cosine is 0" // 实际输出 "Cosine is -4.371139e-08" Console.WriteLine("Cosine is " + MathF.Cos(radian));
偏差原因
这是浮点计算的正常表现,不属于代码逻辑错误,核心原因有两点:
- 数学定义里90度对应精确的π/2弧度,但代码中调用的
MathF.PI是用32位单精度浮点数存储的π近似值,不是无限精度的真实π,因此计算得到的radian和真实π/2存在极其微小的差值,并不是严格等于π/2。 float类型本身精度有限,仅能保证6~9位有效十进制数字的准确性,三角函数的内部计算过程也会引入微小的截断误差,不可能输出和数学解析值完全一致的结果。
你得到的-4.371139e-08绝对值不到千万分之五,完全在单精度浮点计算的正常误差范围内。实际做数值类开发时,永远不要直接用==判断两个浮点数是否相等,遇到这类理论值为0的场景,可以设置一个极小的误差阈值(比如1e-6),只要结果绝对值小于阈值,就可以判定为等价于0。
内容的提问来源于stack exchange,提问作者Priyanshu_ashu
相关产品推荐
相关产品推荐

