ある処理で異常終了した場合に”0に限りなく近い値”をセットしたいのですが
具体的に”限りなく近い値”とはどんな値ですか?
また、その方法はどうするのですか?
正常時はdoubleで宣言された値です。
double sigma;
sigma = 1.2345 // 正常時はこのような値が入る
sigma = ????? // 異常時は限りなく0に近い値が入る
よろしくお願いします。
限りないわけですから、数学的な意味でのゼロに限りなく近い値を
限りのあるdouble型で表現するのは難しいんじゃないでしょうか。
こういう場合、たけぞうさんが作るプログラムの中で
どこまでの精度を保障するのかを決めたらどうでしょう。
例えば小数点以下10桁までとするなら、
0.0000000001
が、たけぞうさんが作るプログラムの中で一番ゼロに限りなく近い数値となるわけです。
これじゃダメ?
>具体的に”限りなく近い値”とはどんな値ですか?
ε (イプシロン)でしょうねぇ、やっぱり。
float.hで「DBL_EPSILON」というマクロで定義されています。
具体的には「2.2204460492503131e-016」という値で、
「1.0+DBL_EPSILON !=1.0 になるような最小の数」と定義されています。
DBL_EPSILONよりDBL_MINの方じゃないかと。
DBL_EPSILONが
>与えられた浮動小数点型で表現可能な1より大きい最小の値と1との差
で,DBL_MINが
>最小の正規化された正の浮動小数点数
ですから。
#JIS X3010より。
いろいろご回答ありがとうございます。
まだ試していないのですが、
下記のように、マクロをそのまま変数に代入できるのでしょうか?
double sigma;
sigma = DBL_EPSILON // 異常時は限りなく0に近い値が入る
// または
sigma = DBL_MIN // 異常時は限りなく0に近い値が入る
よろしくお願いします。
試したらすぐわかることのなのだから,試したらどうですか?
まっ,今回の場合,float.hで定義されるマクロは全て式の値として利用可能なものですから,
変数への代入は可能です。
> ある処理で異常終了した場合に”0に限りなく近い値”をセットしたいのですが
その「0に限りなく近い値」の使い道はなんでしょうか?
場合によっては、
別のフラグでも用意してそのことを示したほうがよいのでは?
> その「0に限りなく近い値」の使い道はなんでしょうか?
ある機能でファイルとDBに出力する処理があります。
処理の途中でエラーが発生した場合、DBにはNULL値を
ファイルには0に限りなく近い値をセットすることになった
ためです。
この問題は解決しました。