タグ

floatとcに関するItisangoのブックマーク (2)

  • 浮動小数点型

    なお,浮動小数点形式の定数リテラルのサフィックス“F”(または“f”),“L”(または“l”)は, “F”はfloat型,“L”はlong double型を示すことになっている. double型のサフィックスはないようだけど,これはリテラルはFかLで指定して, double型にはキャストしながら代入されていくのでOKという意味なんだろう. 参考:Intel x86系CPUの浮動小数点演算中間結果 Intel x86系CPUの場合,double型としては64ビットなのだけど, 演算の中間結果は80ビット(拡張精度)の浮動小数点レジスタスタックに保持していて,精度が高くなっているかもしれない. たとえばVisual C++のデフォルトがこの実装になっていて,演算中は80ビットの拡張精度になる. Visual C++の場合はたいへん複雑なことになっていて, MSDNによると,古い16ビット版Vi

    Itisango
    Itisango 2013/01/24
    #IEEE の場合、 #倍精度 浮動小数点数は符号1、指数11、仮数52。
  • 浮動小数点演算ではまった話 - 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