を一貫性のないintにfloatをキャスト、私はこれらの命令を使用してint
にfloat
値をキャストしようとしている:C++を使用したMinGWのとクラン間で
#include <iostream>
int main() {
float NbrToCast = 1.8f;
int TmpNbr = NbrToCast * 10;
std::cout << TmpNbr << "\n";
}
私は値1.8
が正確float
として表現することはできません理解実際には1.79999995
として格納されています。
したがって、この値に10を掛けると17.99999995
になり、int
にキャストすると、17
となります。
このコードをWindows 7でMinGW
(v4.9.2 32ビット)でコンパイルして実行すると、予想通りの結果(17
)が得られます。
私のMac(X 10.11 OS)上でCLang
(v600.0.57)で、このコードをコンパイルし、実行しているとき、私は私が期待していたものではありませんが、よりは、数学的にを修正思われる結果として、18
を取得方法!
なぜこの違いが生じるのですか?
OSやコンパイラに関係なく一貫した動作を実現する方法はありますか?
https://stackoverflow.com/questions/18494237/floating-point-mismatch-between-compilers-visual-studio-2010-and-gcc – v7d8dpo4
最後の行を 'std :: cout << stdに変更してみてください::精度(20)<< TmpNbr << "" \ n ";' –
@RichardCritten: 'TmpNbr'は' int'で、 'std :: precision(20)'のポイントは何ですか? – Nawaz