我在Java和C#中运行了完全相同的代码,但结果却不同。
为什么会这样呢?因为在两种语言中,double具有完全相同的规格:
double是Java中表示64位IEEE 754浮点数的类型。
double是C#中以IEEE 754格式表示64位双精度浮点数的类型。
Java
double a = Math.pow(Math.sin(3), 2);
double b = Math.pow(Math.cos(3), 2);
System.out.println(a); // 0.01991485667481699
System.out.println(b); // 0.9800851433251829
System.out.println(a+b); // 0.9999999999999999
C#
double a = Math.Pow(Math.Sin(3), 2);
double b = Math.Pow(Math.Cos(3), 2);
Console.WriteLine(a); // 0.019914856674817
Console.WriteLine(b); // 0.980085143325183
Console.WriteLine(a+b); // 1
Sin
和Cos
的实现是一样的吗? - RealSkeptic