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

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

如何做浮點(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é),因為在這個上下文中,這樣的事情是沒有意義的。我以前讀過浮點(diǎ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ù)字。我將此標(biāo)記為語言不可知論者,因為無論我使用哪種語言,我都對如何實現(xiàn)這一目標(biāo)感興趣。
查看完整描述

3 回答

?
守著星空守著你

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

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

對于一個“模糊等于”的比較,這個(Java代碼,應(yīng)該很容易適應(yīng))是我想出來的浮點(diǎn)指南經(jī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;
    }}

它附帶了一個測試套件。您應(yīng)該立即排除任何沒有的解決方案,因為在某些邊緣情況下,幾乎可以保證它會失敗,比如有一個值0,兩個與零相對的非常小的值,或者無窮大值。

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

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


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

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

我有個比較浮點(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");}

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


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

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

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

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

一個音符。你的例子很有趣。

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!")


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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