簡體   English   中英

c#編譯器如何以不同方式處理加法和乘法

[英]How does c# compiler handle addition and multiplication differently

因為c#中的浮點數/雙數只能在基數2中表示,才能精確表示; 我期望t2t3都是非零但t2 = 0而t3確實不為零。 誰能解釋一下?

double d2 = 1.0/3.0;
double t2 = 1.0 - 3.0*d2;
double t3 = 1.0 - d2 - d2 - d2;

t2的情況下,您創建了幾個確實會導致一定量錯誤的中間值。 恰好相反,操作導致相等且相反的誤差量,導致這些誤差同時抵消零誤差,並產生正確的結果。

t3的情況導致每個中間操作的誤差相等且不相反,導致誤差彼此復合,而不是相互抵消,導致凈非零誤差。

我認為問題不在於C#本身,而在於微處理器的工作方式。 你不能分為1/3並期望一個數字存儲為1/3。

計算機也做一些技巧(添加錯誤)來理解常見的數學:

double d1 = 1/3.0;
d1 = d1 * 3.0;

會導致

 d1 = 1.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM