[英]Is there a floating point literal suffix in C++ to make a number double precision?
[英]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.html和http://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.