|
趣味で初級c/c++教本を読んで勉強している者です。
long double型でパイを使う場合せっかく M_PI が定義されているのに使い方が分からない事に気づきました。
「long double ld=M_PI;」のように使用すると、ld には double の精度しか得られませんでした。
long double の精度を得るために「L」を追加して、
「long double ld=M_PIL;」のようにしてコンパイルすると、
コンパイラが「エラー E2451 test3.cpp 8: 未定義のシンボル M_PIL(関数 main() )」
とエラーになってしまい、M_PILを一つの塊として扱っているようです。
回避策として、「long double ld=3.14159265358979323846L;」のように、
数値を書き込めば問題無くlong double型の精度が出るのですが、
気分的な問題でどうしても M_PI を使いたいと私は思っています。
解決策をご存知の方アドバイスをいただけるとありがたいです。
M_PI を使用してlong double型の精度が出せると思う根拠
math.h の中の「M_PI」は下記のように設定されています。
#define M_PI 3.14159265358979323846
これは21桁なので明らかにdouble型の精度を超えていると思います。
つまりlong double型の精度で使用する方法が有ると私は考えています。
そうでなければここまで精度を上げる必要が無いはずです。
過去ログで「long double,M_PI,誤差,修飾」等を検索して「No.43. πの定義と実数での誤差」
を見つけましたが、望む内容は有りませんでした。
動作環境
Borland C++ Compiler 5.5
windows 98se
|