簡體   English   中英

為什么雙舍入而不是十進制?

[英]Why is double rounded and decimal is not?

以下C#代碼:

int n = 3;
double  dbl = 1d / n;
decimal dec = 1m / n;
Console.WriteLine(dbl * n == 1d);
Console.WriteLine(dec * n == 1m);

輸出

True
False

顯然, double精度和decimal都不能decimal表示1/3。 但是dbl * n舍入為1,而dec * n dbl * n入。 為什么? 該行為記錄在哪里?

UPDATE

請注意,我的主要問題是為什么他們的行為有所不同。 假設四舍五入的選擇是在設計IEEE 754和.NET時有意識地做出的選擇,我想知道選擇一種舍入類型而不是另一種類型的原因是什么。 在上面的示例中,盡管有效位數少於decimaldouble似乎在產生數學上正確的答案方面表現更好。 為什么decimal的創建者不使用相同的舍入? 是否存在使現有的decimal行為更有利的方案?

測試:

int n = 3;
double  dbl = 1d / n;
decimal dec = 1m / n;

Console.WriteLine("/n");
Console.WriteLine(dbl);
Console.WriteLine(dec);

Console.WriteLine("*n");
Console.WriteLine(dbl * n);
Console.WriteLine(dec * n);

結果:

/n
0.333333333333333
0.3333333333333333333333333333
*n
1
0.9999999999999999999999999999

用基數10,雙精度和單基數2保存的十進制數。可能在cpu中3 * 0.333333333333333333之后為double的二進制過載和結果1。但是基數10的3 * 0.3 --- 3-無過載,結果0.9 --- 9

暫無
暫無

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

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