在工作中我發現了乙個c#浮點數的精度問題,以下的程式執行結果並未得到我預期的結果:
view source
print?
01
namespace
floattest
02
"
, c);
13
14
console.readline();
15
}
16
}
17
}
我期望的結果是得到1,結果程式返回的結果為c = 0
這讓我想到了可能是因為浮點數採用ieee754的表示方法,在運算中b會轉換成double,可能是在轉換中演算法的問題導致精度丟失,為了證實該問題,我做了下面的實驗:
view source
print?
01
namespace
floattest
02
"
, a);
13
console.writeline(
"b = "
, convert.todouble(b));
14
console.writeline(
"c = "
, c);
15
16
console.readline();
17
}
18
}
19
}
這次果然得到了意料中的結果:float在轉成double的時候出現了精度的丟失問題
a = 0.0001
b = 0.100000001490116
c = 0
如果是在型別轉換的時候導致的精度丟失,那我把b改為double應該可以解決這個問題:
view source
print?
01
namespace
floattest
02
"
, a);
13
console.writeline(
"b = "
, convert.todouble(b));
14
console.writeline(
"c = "
, c);
15
16
console.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廠商...