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

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

檢查浮點值是否等于0是否安全?

檢查浮點值是否等于0是否安全?

30秒到達戰(zhàn)場 2019-10-17 14:50:55
我知道您通常不能依賴雙精度或十進制類型值之間的相等性,但是我想知道0是否是特例。雖然我可以理解0.00000000000001和0.00000000000002之間的不精確性,但0本身似乎很難弄亂,因為它什么也沒有。如果您對某事一無所知,那就再也不是什么了。但是我對這個話題不太了解,所以我不必說。double x = 0.0;return (x == 0.0) ? true : false;那會永遠返回true嗎?
查看完整描述

3 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

它是安全的期望,比較將返回true當且僅當雙變量具有完全相同的值0.0(在你原來的代碼片段,當然,這種情況)。這與==操作符的語義一致。a == b表示“ a等于b”。

當在純數學中相同計算的結果為零時,期望某種計算的結果在雙精度(或更普遍地為浮點數)算法中為零是不安全的(因為它是不正確的)。這是因為當計算深入時,會出現浮點精度誤差-這個概念在數學的實數運算中不存在。


查看完整回答
反對 回復 2019-10-17
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

如果您需要進行大量“相等”比較,則最好在.NET 3.5中編寫一些輔助函數或擴展方法以進行比較:


public static bool AlmostEquals(this double double1, double double2, double precision)

{

    return (Math.Abs(double1 - double2) <= precision);

}

可以通過以下方式使用此方法:


double d1 = 10.0 * .1;

bool equals = d1.AlmostEquals(0.0, 0.0000001);


查看完整回答
反對 回復 2019-10-17
?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

對于您的簡單樣本,該測試還可以。但是呢:


bool b = ( 10.0 * .1 - 1.0 == 0.0 );

請記住,.1是二進制的重復十進制數,不能精確表示。然后將其與以下代碼進行比較:


double d1 = 10.0 * .1; // make sure the compiler hasn't optimized the .1 issue away

bool b = ( d1 - 1.0 == 0.0 );

我將讓您進行測試以查看實際結果:您更有可能以這種方式記住它。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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