Trignometry in C# Cos & CosA
我遇到了一些很容易回答的问题,但我不能用手指去回答。自从我做了三角学以来,已经很久了。
1 2 3 4 5 6 7 8 | double cosValue = -2.7105054312E-20; // (ACos) returns the angle var deducedAngleInRadian = System.Math.Acos(cosValue); var cos = System.Math.Cos(deducedAngleInRadian); Console.WriteLine(cosValue); Console.WriteLine(deducedAngleInRadian); Console.WriteLine(cos); |
输出:
1 2 3 | -2.7105054312E-20 1.5707963267949 6.12303176911189E-17 |
为什么
你注意到这两个值有多少接近0,并且彼此接近吗?
浮点(im)精度和每种方法的实现可能完全可以解释这一点。这些方法并不完美,例如它们依赖于pi的近似值(当然,因为pi不能存储在计算机中;)。
您可能可以通过一个科学的库来实现更好的精度(您真的需要它吗),专用于此,并且使用比double更高精度的类型。你可能会在使用System.Decimal的数学运算中发现一些有趣的东西。或https://stackoverflow.com/questions/1387430/recommended-math-library-for-c-net