倍精度で精度が足りない...

他の先生の卒研の学生から、 「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"と区別ができないので、大文字で書くべき。

 

2016年11月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

アーカイブ

Google

このブログ記事について

このページは、T-Saitohが2016年11月15日 16:29に書いたブログ記事です。

ひとつ前のブログ記事は「コンパイラの技術と関数電卓プログラム(2)」です。

次のブログ記事は「構造体を使ったプログラム例」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。