• 締切済み

浮動小数点型データの誤差

doubleなどの浮動小数点型の数値を値渡しで関数に渡したとき、内部表現は変わらないことは保証されていますか? double g_d; void func(double d) { assert(d==g_d); // これは保障されている? } void main() { g_d=1.23; func(g_d); } 似たような話で、異なるコンテキストで定義した同じ数値は必ず同じ内部表現を持つのか気になります。 class Class1 { double d=1.23; }; class Class2 { double d=1.23; }; void main() { Class1 c1; Class2 c2; assert(c1.d==c2.d); //これはどのような処理系でもOK? } Class1とClass2が異なるコンパイル単位に定義されている場合はどうでしょうか?もちろんこのような比較はしないのがベターだとは思いますが、古いコードに多く残っていて修正すべきかどうかなと。 クラスや構造体のメンバの場合、パディングのような処理系依存のややこしい話もあるので気になります。

みんなの回答

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

IEEE754 という標準規格について調べてみると 幸せになれるかもしれません。

katorea21
質問者

お礼

ご回答ありがとうございます。 規格は読みましたが幸せにはなれません。今回のケースでは問題ないことが規格上保障されているのかどうか分かりませんでした。

関連するQ&A