タグ

floatに関するkicchomu3のブックマーク (2)

  • PHP以外全員不正解 - hnwの日記

    いまだにround関数のまとめは出来ていません。そろそろ皆様に忘れられる前にまとめなきゃな、とは思っていますが、もうしばらくお待ちください。今回は微妙にround関数と近いような遠いような話題です。 巨大な数の丸めについて実験しているうちに、PHPだけ正解でPerlRubyPythonが不正解と思われる例を見つけました。普段の叩かれっぷりを考えるとPHPだけ正解なんて状態は有り得ない気がするのですが、僕には他の結論が導けませんでした。識者の皆様に「ダウト!」と指摘して頂ければ幸いです。 今回は、2の65乗のことを265と表現することにします*1。 265=36893488147419103232の次に大きいIEEE64bit浮動小数点数は265+213=36893488147419111424です。仮に、265+212+1=36893488147419107329を浮動小数点数に丸める

    PHP以外全員不正解 - hnwの日記
  • 浮動小数点演算ではまった話 - bkブログ

    浮動小数点演算ではまった話 浮動小数点演算のありがちな問題ではまりました。 いろいろ調べているうちに x86 特有のちょっとおもしろい 現象に遭遇したので紹介したいと思います。 パーセンテージの計算 簡単な C のプログラムでパーセンテージを計算しようと思い、 次のようなコードを書きました。 int x, y; ... int a = (double)x / y * 100; int a = x * 100 / y としないのは、 x が大きい場合に x * 100 が オーバーフローを起こす (INT_MAX を越える) ためです。 このコードは一見、期待通りに動いていたのですが、 しばらく使っていると、手元の環境では x = 53, y = 100 のときに a は 53 ではなく 52 になることに気づきました。 これは次の理由によります。 式の最初の (double)53 / 10

  • 1