簡體   English   中英

浮點錯誤

[英]Floating Point Error

我的C ++代碼中有一個奇怪的錯誤:

float cosTheta = someFunction();
cout << cosTheta << endl;  // prints 1 on the console
if (cosTheta == 1) {       // doesn't enter this condition
    cout << "it is 1" << endl;
}
float sinTheta = sqrt(1 - pow(cosTheta, 2));
return (someVariable * sinTheta);

問題是:cosTheta是1,但它沒有進入條件,雖然它在屏幕上打印1。 當我打印返回的值時,它應該是0,因為cosTheta是1,所以sinTheta得到0而返回值得到0,但我得到0.0953562 ...

我在Java中測試了相同的代碼,結果我得到0。

您不應該將浮點數與==進行比較。 浮點運算中的舍入誤差意味着您應該選擇精度EPSILON (適合您的情況)並使用它如下:

const float EPSILON = 0.00001;

if( fabs(cosTheta - 1) < EPSILON ) {
    cout << "It is approximately 1\n";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM