C float double精度損的的問題

2021-06-02 04:55:55 字數 2173 閱讀 5258

在工作中我發現了乙個c#浮點數的精度問題,以下的程式執行結果並未得到我預期的結果:

view source

print?

01namespacefloattest

02", c);

13

14console.readline();

15}

16}

17}

我期望的結果是得到1,結果程式返回的結果為c = 0

這讓我想到了可能是因為浮點數採用ieee754的表示方法,在運算中b會轉換成double,可能是在轉換中演算法的問題導致精度丟失,為了證實該問題,我做了下面的實驗:

view source

print?

01namespacefloattest

02", a);

13console.writeline("b = ", convert.todouble(b));

14console.writeline("c = ", c);

15

16console.readline();

17}

18}

19}

這次果然得到了意料中的結果:float在轉成double的時候出現了精度的丟失問題

a = 0.0001

b = 0.100000001490116

c = 0

如果是在型別轉換的時候導致的精度丟失,那我把b改為double應該可以解決這個問題:

view source

print?

01namespacefloattest

02", a);

13console.writeline("b = ", convert.todouble(b));

14console.writeline("c = ", c);

15

16console.readline();

17}

18}

19}

這次卻是得到我們期望的結果:

a = 0.0001

b = 0.1

c = 1

因此,在程式中,我們應該盡量的避免浮點數型別轉換導致的精度丟失。

我在gcc上做了同樣的實驗,結果不管哪種方式得到的結果都是正確的,我只能說可能是double convert.todouble(float)的實現的原因導致的。

10kv線損計算公式 線損以及線損率的計算公式

線損率計算公式 線損率 線損電量 供電量 100 供電量 售電量 供電量 100 1 輸電線路損耗 1 單一線路有功功率損失計算公式為 p i2r 式中 p 損失功率,w i 負荷電流,a r 導線電阻,2 三相電力線路 線路有功損失為 p pa十 pb十 pc 3i2r 3 溫度對導線電阻的影響 ...

止損 鱷魚原則

當鱷魚咬住了乙個人的腳,如果這個人用手臂去跟鱷魚搏鬥的話,鱷魚的嘴巴就會同時咬住他 的手,並且越掙扎陷的越深,直到最後被鱷魚吃掉。在這種情況下,唯一的生存機會就是立刻 把這只腳犧牲掉。講到做交易,乙個重要的原則就是止損,鱷魚原則講的就是止損理念。鱷魚在吞食獵物的時候,每咬一口的動作都非常迅速,通常獵...

使用者與OA廠商 一榮俱榮,一損俱損

一榮俱榮,一損俱損 很好理解,這個成語同樣適用於oa廠商與其使用者。在使用者的層面來講,專案成功上線可以為其帶來良性迴圈的運營空間,當越來越多的使用者都認可時,oa廠商也就能夠收穫更多的美譽。反之,如果oa廠商專案成功率不高,讓使用者承擔了很大的損失,那麼oa廠商的口碑自然會一落千丈。所以,oa廠商...