亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

浮點加法和乘法是關聯的嗎?

浮點加法和乘法是關聯的嗎?

C++
倚天杖 2019-10-21 15:20:52
當我添加三個浮點值并將它們與1進行比較時出現問題。cout << ((0.7 + 0.2 + 0.1)==1)<<endl;     //output is 0cout << ((0.7 + 0.1 + 0.2)==1)<<endl;     //output is 1為什么這些價值觀會有所不同?
查看完整描述

3 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

浮點加法不一定是關聯的。如果更改添加順序,則可以更改結果。


關于該主題的標準論文是每位計算機科學家都應了解的浮點算法。它給出以下示例:


另一個灰色區域涉及括號的解釋。由于舍入誤差,代數的關聯定律不一定適用于浮點數。例如,當x = 1e30,y = -1e30和z = 1時,表達式(x + y)+ z的答案與x +(y + z)完全不同(前者為1,后者為0) )。


查看完整回答
反對 回復 2019-10-21
?
神不在的星期二

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)。


查看完整回答
反對 回復 2019-10-21
  • 3 回答
  • 0 關注
  • 608 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號