3 回答

TA貢獻1864條經驗 獲得超6個贊
浮點加法不一定是關聯的。如果更改添加順序,則可以更改結果。
關于該主題的標準論文是每位計算機科學家都應了解的浮點算法。它給出以下示例:
另一個灰色區域涉及括號的解釋。由于舍入誤差,代數的關聯定律不一定適用于浮點數。例如,當x = 1e30,y = -1e30和z = 1時,表達式(x + y)+ z的答案與x +(y + z)完全不同(前者為1,后者為0) )。

TA貢獻1963條經驗 獲得超6個贊
在C或C ++中,浮點乘法不相關。
證明:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
using namespace std;
int main() {
int counter = 0;
srand(time(NULL));
while(counter++ < 10){
float a = rand() / 100000;
float b = rand() / 100000;
float c = rand() / 100000;
if (a*(b*c) != (a*b)*c){
printf("Not equal\n");
}
}
printf("DONE");
return 0;
}
在此程序中,大約30%的時間(a*b)*c不等于a*(b*c)。
- 3 回答
- 0 關注
- 608 瀏覽
添加回答
舉報