2016-04-04 31 views
1

我試圖做一個物理問題,需要存儲一個值大約5 * 10 -11; 嘗試浮動後,長雙和其他幾個人都沒有看到足夠長的時間。有沒有可以讓我這樣做的數據類型? 感謝在C中存儲一個長十進制數

long double I = 0; 
I = 0.01902*pow(0.00318,3)/12; 
printf("%Lf\n",I); 

輸出爲0.000000

+1

查看*任意精確數字*,例如在[這個線程](http://stackoverflow.com/questions/1218149/arbitrary-precision-arithmetic-explanation)或[GNU MP](https://gmplib.org/)。 – Jens

+2

究竟是什麼讓你斷定'float'或'double double'不夠「夠長」? –

+0

IIRC,該值應該在IEEE754單精度浮點數中正確編碼。 – 3442

回答

4
long double I = 0; 
I = 0.01902*pow(0.00318,3)/12; 

此時,I的價值大約是5.096953e-11。然後......

printf("%Lf\n", I); 

在此printf()調用的唯一格式說明是%Lf。這表明參數是long doubleL),並且應該將其打印爲浮點數(f)。最後,由於精確度(在期間後打印的位數)沒有明確給出,因此假定爲6。這意味着在這段時間後最多可打印6位數字。

有幾種方法可以解決這個問題。其中兩個將是...

printf(".15Lf\n", I); 

這將設置精度爲15。因此,該期限後將打印15位數字。並且...

printf("%Le\n", I); 

這將以科學計數法打印數字,即5.096953e-11。它也可以配置爲打印更多的數字,如果你想要它們。

相關問題