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

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

如何做浮點(diǎn)比較?

如何做浮點(diǎn)比較?

如何做浮點(diǎn)比較?我目前正在編寫一些代碼,其中有如下內(nèi)容:double a = SomeCalculation1();double b = SomeCalculation2();if (a < b)     DoSomething2();else if (a > b)     DoSomething3();然后在其他地方,我可能需要做平等:double a = SomeCalculation3();double b = SomeCalculation4();if (a == 0.0)    DoSomethingUseful(1 / a);if (b == 0.0)    return 0; // or something else here總之,我有很多浮點(diǎn)的數(shù)學(xué),我需要做各種條件的比較。我不能把它轉(zhuǎn)換成整數(shù)數(shù)學(xué),因?yàn)樵谶@個(gè)上下文中,這樣的事情是沒有意義的。我以前讀過浮點(diǎn)比較可能是不可靠的,因?yàn)槟梢赃@樣做:double a = 1.0 / 3.0;double b = a + a + a;if ((3 * a) != b)     Console.WriteLine("Oh no!");簡而言之,我想知道:如何可靠地比較浮點(diǎn)數(shù)(小于,大于等于)?我使用的數(shù)字范圍大概在10e-14到10E6之間,所以我確實(shí)需要處理小數(shù)字和大數(shù)字。我將此標(biāo)記為語言不可知論者,因?yàn)闊o論我使用哪種語言,我都對(duì)如何實(shí)現(xiàn)這一目標(biāo)感興趣。
查看完整描述

3 回答

?
守著星空守著你

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

比較更大/更小并不是一個(gè)真正的問題,除非你在浮動(dòng)/雙精度限制的邊緣工作。

對(duì)于一個(gè)“模糊等于”的比較,這個(gè)(Java代碼,應(yīng)該很容易適應(yīng))是我想出來的浮點(diǎn)指南經(jīng)過大量的工作,并考慮到了大量的批評(píng):

public static boolean nearlyEqual(float a, float b, float epsilon) {
    final float absA = Math.abs(a);
    final float absB = Math.abs(b);
    final float diff = Math.abs(a - b);

    if (a == b) { // shortcut, handles infinities
        return true;
    } else if (a == 0 || b == 0 || diff < Float.MIN_NORMAL) {
        // a or b is zero or both are extremely close to it
        // relative error is less meaningful here
        return diff < (epsilon * Float.MIN_NORMAL);
    } else { // use relative error
        return diff / (absA + absB) < epsilon;
    }}

它附帶了一個(gè)測試套件。您應(yīng)該立即排除任何沒有的解決方案,因?yàn)樵谀承┻吘壡闆r下,幾乎可以保證它會(huì)失敗,比如有一個(gè)值0,兩個(gè)與零相對(duì)的非常小的值,或者無窮大值。

另一種選擇(更多細(xì)節(jié)請參見上面的鏈接)是將浮點(diǎn)數(shù)的位模式轉(zhuǎn)換為整數(shù),并接受固定整數(shù)距離內(nèi)的所有內(nèi)容。

在任何情況下,可能沒有任何解決方案是完美的所有應(yīng)用程序。理想情況下,您應(yīng)該使用包含實(shí)際用例的測試套件來開發(fā)/調(diào)整自己的應(yīng)用程序。


查看完整回答
反對(duì) 回復(fù) 2019-06-19
?
月關(guān)寶盒

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

我有個(gè)比較浮點(diǎn)數(shù)的問題A < BA > B以下是似乎行之有效的方法:

if(A - B < Epsilon) && (fabs(A-B) > Epsilon){
    printf("A is less than B");}if (A - B > Epsilon) && (fabs(A-B) > Epsilon){
    printf("A is greater than B");}

晶圓廠-絕對(duì)值-照顧到它們是否本質(zhì)上是平等的。


查看完整回答
反對(duì) 回復(fù) 2019-06-19
?
MM們

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

我們必須選擇一個(gè)公差級(jí)別來比較浮點(diǎn)數(shù)。例如,

final float TOLERANCE = 0.00001;if (Math.abs(f1 - f2) < TOLERANCE)
    Console.WriteLine("Oh yes!");

一個(gè)音符。你的例子很有趣。

double a = 1.0 / 3.0;double b = a + a + a;if (a != b)
    Console.WriteLine("Oh no!");

這里有些數(shù)學(xué)

a = 1/3b = 1/3 + 1/3 + 1/3 = 1.1/3 != 1

哦,是的.。

你是說

if (b != 1)
    Console.WriteLine("Oh no!")


查看完整回答
反對(duì) 回復(fù) 2019-06-19
  • 3 回答
  • 0 關(guān)注
  • 627 瀏覽

添加回答

舉報(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)