第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

C ++浮點(diǎn)精度

C ++浮點(diǎn)精度

C++ C
白衣染霜花 2019-10-21 14:55:29
double a = 0.3;std::cout.precision(20);std::cout << a << std::endl;結(jié)果:0.2999999999999999889double a, b;a = 0.3;b = 0;for (char i = 1; i <= 50; i++) {  b = b + a;};std::cout.precision(20);std::cout << b << std::endl;結(jié)果:15.000000000000014211因此,“ a”小于應(yīng)有的大小。但是,如果我們將“ a”取50倍,結(jié)果將大于應(yīng)有的結(jié)果。為什么是這樣?以及在這種情況下如何獲得正確的結(jié)果?
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

為了獲得正確的結(jié)果,請不要將精度設(shè)置為大于此數(shù)字類型可用的精度:


#include <iostream>

#include <limits>

int main()

{

        double a = 0.3;

        std::cout.precision(std::numeric_limits<double>::digits10);

        std::cout << a << std::endl;

        double b = 0;

        for (char i = 1; i <= 50; i++) {

                  b = b + a;

        };

        std::cout.precision(std::numeric_limits<double>::digits10);

        std::cout << b << std::endl;

}

盡管如果該循環(huán)運(yùn)行5000次迭代而不是50次迭代,則即使使用這種方法,也會(huì)顯示累積的錯(cuò)誤-這就是浮點(diǎn)數(shù)的工作方式。


查看完整回答
反對 回復(fù) 2019-10-21
?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

為什么是這樣?

因?yàn)楦↑c(diǎn)數(shù)以二進(jìn)制形式存儲(chǔ),所以0.3表示0.01001100110011001 ...重復(fù),就像1/3表示0.333333 ...重復(fù)十進(jìn)制。當(dāng)您編寫時(shí)0.3,您實(shí)際上得到0.299999999999999988897769753748434595763683319091796875(無窮大的二進(jìn)制表示形式四舍五入為53個(gè)有效數(shù)字)。

請記住,對于設(shè)計(jì)了浮點(diǎn)的應(yīng)用程序,可以精確地表示0.3并不是問題。浮點(diǎn)設(shè)計(jì)用于:

  • 物理測量,通常只能測量到4 sig圖,而從不超過15。

  • 對數(shù)和三角函數(shù)之類的先驗(yàn)函數(shù)無論如何都只是近似的。

與其他錯(cuò)誤源相比,二進(jìn)制十進(jìn)制轉(zhuǎn)換與之無關(guān)。

現(xiàn)在,如果您要編寫財(cái)務(wù)軟件,那么$ 0.30 恰好是 $ 0.30,那就不一樣了。有針對這種情況設(shè)計(jì)的十進(jìn)制算術(shù)類。

以及在這種情況下如何獲得正確的結(jié)果?

將精度限制為15個(gè)有效數(shù)字通常足以隱藏“噪聲”數(shù)字。除非您確實(shí)需要確切的答案,否則通常這是最好的方法。


查看完整回答
反對 回復(fù) 2019-10-21
?
陪伴而非守候

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊

計(jì)算機(jī)以二進(jìn)制而不是十進(jìn)制存儲(chǔ)浮點(diǎn)數(shù)。


許多在十進(jìn)制中看起來很普通的數(shù)字,例如0.3,都沒有二進(jìn)制形式的有限長度的精確表示。

因此,編譯器會(huì)選擇具有精確二進(jìn)制表示形式的最接近的數(shù)字,就像您為編寫0.33333的一樣1?3。


如果添加許多浮點(diǎn)數(shù),這些微小的差異加起來,就會(huì)得到意想不到的結(jié)果。


查看完整回答
反對 回復(fù) 2019-10-21
  • 3 回答
  • 0 關(guān)注
  • 781 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)