私はVerilogでハードウェア倍精度加算器を実装しています。検証フェーズでハードウェア出力をMATLAB(またはC)の倍精度加算出力と比較すると、同じ丸めモード(最も近い偶数に丸めます)を使用していることを考慮して、LSBが一致しないいくつかの奇妙なケースが見つかりました。私の質問は、Cの計算の正確さについてです、丸めを行うことで本当に正確ですか、それはいくつかのCPUアーキテクチャ(32または64ビット)に限定されていますか?ここLSBエラーを伴う浮動小数点加算
は、例えばだ、
A = 0x62a5a1c59bd10037 = 1.5944933396238637e + 167
B = 0x62724bc40659bf0c = 1.685748657333889e + 166 = 0.1685748657333889e + 167
正しい出力(単に加算を行うことにより手動で上記の実数の)
= 1.7630682053572526e + 167 = 0x62a7eb3e1c9c3819(これは私のハードウェアと一致する)
IがCでA + Bを行うときに、私は私ができる中間操作 http://www.ecs.umass.edu/ece/koren/arith/simulator/FPAdd/
をチェックするためにこのアプリケーションをしようとすると、結果は
= 1.7630682053572525e + 167 = 0x62a7eb3e1c9c3818
に等しいです。 Cが丸めを正しく行っていない(仮に最も近い偶数への丸め)仮数を見てください。この場合、仮数に1を加えて丸めます。なぜこれが起こっているのか?