タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

floatとx86に関するrydotのブックマーク (2)

  • 80 bit float number problem

    x86における 浮動小数点演算の精度の制御と、 80bit 浮動小数点演算問題 たけおか update: 2023/NOV/02 初出: 2010/NOV/20 0.はじめのはじめに みんな大好き Intel x86, AMD 64の浮動小数点演算のアーキテクチャは、 8087時代からの80bit演算に起因し、IEEE 754から逸脱するという欠点があった。 だが、今では、 gcc は、暗黙のうちに、SIMD(SSE,AVXなど)演算器を使用するコードを 生成するようになり、 SIMDユニットにて浮動小数点演算することで、 80bit演算由来の問題が、解消されるようになっている。 ではあるものの、この文書は、延々と80bit起因の問題について述べている。 現在も、8087由来の、x86伝統の内部80bit演算はCPU内には健在である。 80bit演算の害を体験したい場合は、 gccのオプシ

  • 浮動小数点演算ではまった話 - 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