なお,浮動小数点形式の定数リテラルのサフィックス“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
浮動小数点演算ではまった話 浮動小数点演算のありがちな問題ではまりました。 いろいろ調べているうちに 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
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く