• ベストアンサー

C言語キャスト

こんにちは Windows7+Cygwinで次のコードの挙動がおかしいです。バグでしょうか void main() { double a = 33.33; int b; a *= 10; a *= 10; b = (int)a; printf("%d\n", b); } 結果:3333と表示するはずが3332になる 詳しい方いましたらよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

最後に printf("%20.15f\n", a); を追加したらどんな表示が得られますか?

yotudesu
質問者

お礼

3332.999999999999545 内部データが小さいことが判明しました!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

あなたが言う「バグ」というのが「この入力に対してこう出力するようにコーディングしなくてはならない、のにそうなっていない」という意味ならばバグです。しかし、「このコードについて出力結果がこうあるべきなのにそうなっていない、これは gcc のバグだ」という意味ならばバグではないです。 説明するとこの欄では足りないので、参考 URL をご覧ください。このページでは .NET 系での話をしていますが、本質的な事情は gcc でも同じです。

参考URL:
http://dobon.net/vb/dotnet/beginner/floatingpointerror.html
yotudesu
質問者

お礼

リンクありがとうございます! バグではなくて内部データが小さいことが原因だったんですね!

すると、全ての回答が全文表示されます。

関連するQ&A