倍精度で精度が足りない…
他の先生の卒研の学生から、「C言語のプログラムを書いているけど、 精度が足りないのでどうしたらいいか?」 という質問をうける。
double 型で計算をしているようなので、 計算アルゴリズムの問題かもしれない。 積分計算なら、台形法じゃなく「シンプソンの公式」を使うとか、 微分方程式を解くのなら、「オイラー法」とか 「ルンゲクッタ法」を使うとか…。 でも、この辺は、私は自信がないので、 物理系のシミュレーションの卒研をしている先生の方が 詳しいので、計算方法アドバイスしてもらうべき…
もう一つの対応という点では、もっと精度の いい型を使う方法。整数型演算が絡む場合であれば、 bignum というライブラリで…という方法もあるけど、 今回は double 型の計算。
ということで、long double 型を説明する。
#include <stdio.h> #include <math.h> int main() { long double x = 3.14159265358979323846264338327950288L ; printf( "%Lf\n" , x ) ; return 0 ; }
3.14の後ろについている"L"が重要。 "l"でもいいけど、"1"と区別ができないので、大文字で書くべき。