2016-04-04 18 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」や「long double」は「十分に長い」とは限りません。 –

+0

IIRCの場合、その値はIEEE754単精度浮動小数点数で正しくエンコードする必要があります。 – 3442

答えて

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

で、Iの値は約5.096953e-11です。その後...このprintf()コールで

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

唯一の書式指定子が%Lfです。これは、引数がlong doubleL)であり、浮動小数点数(f)として出力されることを示します。最後に、精度(期間後に印刷される桁数)が明示的に与えられていないので、6と仮定されます。これは、期間の後に最大6桁の数字が印刷されることを意味します。

これを解決するにはいくつかの方法があります。それらのうちの2つは、...

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

これは15する精度を設定しますでしょう。したがって、期間の後に15桁の数字が印刷されます。そして...

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

これは、数値を科学的表記で、つまり5.096953e-11と表示します。必要に応じてさらに数字を印刷するように設定することもできます。

関連する問題