我正在阅读其他人在C#中编写的代码,并且我遇到了类似于以下内容的函数:
public double calculate(double radianAngle)
{
double sine = Math.Sin(radianAngle);
double cosine;
if(angle > 0.0 && angle < Math.PI / 2.0)
cosine = Math.Sqrt(1.0 - sine * sine);
else
cosine = Math.Cos(radianAngle);
// ... unrelated code here
return resultThatUsesSineAndCosine;
}
这段代码似乎指的是数学身份:
(cos(x))^2 = 1 - (sin(x))^2
但为什么你需要为此添加一个if语句?如果它恰好等于Math.Cos(radianAngle)
,那为什么首先呢?是否有更准确的原因?或者这是微观优化?或者可能是这个代码在另一种语言(C ++)中进行了微优化,然后移植到C#,微优化完好无损?即使是微优化,为什么它只适用于0和pi / 2之间的角度?