关于三角学:C#Cos&

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

为什么cosValuecos不一样?


你注意到这两个值有多少接近0,并且彼此接近吗?

浮点(im)精度和每种方法的实现可能完全可以解释这一点。这些方法并不完美,例如它们依赖于pi的近似值(当然,因为pi不能存储在计算机中;)。

您可能可以通过一个科学的库来实现更好的精度(您真的需要它吗),专用于此,并且使用比double更高精度的类型。你可能会在使用System.Decimal的数学运算中发现一些有趣的东西。或https://stackoverflow.com/questions/1387430/recommended-math-library-for-c-net