簡體   English   中英

GNU C ++浮點數精度

[英]gnu c++ floating number precision

我有一個關於浮點數的簡單問題,

double temp;  
std::cout.precision(std::numeric_limits<double>::digits10);
temp = 12345678901234567890.1234567890;
std::cout << (temp < std::numeric_limits<double>::max()) << std::endl;
std::cout << std::fixed << std::endl;
std::cout << temp << std::endl;

但是,我得到的輸出是這樣,

1
12345678901234567168.000000000000000

temp的值仍在double的范圍內,但是,該值完全不同。 我想知道我在這里做錯了什么?

謝謝。

精度僅具有15.95的十進制數字。 您已經超出了該值的整數部分的位數,因此,最后幾位數失去了精度,並且小數點后沒有任何有用的位數。

在使用浮點值進行更多工作之前,您可能應該看一下: http : //docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

並沒有完全不同。 正確到16位左右。 這就是您可以從double獲得的期望。

雙精度只能存儲有限的精度。 可以算出約15個十進制數字。

這是一篇有關浮點數如何表示及其含義的有用文章: 浮點數

IEEE 754對於任何給定值都不精確-例如, http://www.cprogramming.com/tutorial/floating_point/understanding_floating_point.htmlhttp://support.microsoft.com/kb/42980

根據http://ridiculousfish.com/blog/posts/float.html,-358974.27不能在float上表示,我記得(盡管我懶得對其進行測試)即使是“簡單”的東西,例如2.2或2.3不能精確地表示為double

暫無
暫無

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

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