4

基本的な質問ですが、コードは非常に大きいですが、私の問題は、基本的には基本的なものです。

変数と呼ばれるdouble値があり、cout << variableでチェックすると、たとえば982になります。

コードの次の行はintintvariable=variableです。

次に、cout << intvariableでチェックすると、981が与えられます。

面白いことに、これは常に発生するとは限りません。985では985のままかもしれませんが、984と983では、983と982が返されます。これはまったく理解できないようです。私はそれをfloatに変換してからintに変換するか、別のdoubleに変換してからintに変換してみました。

モジュラス演算子を使用できるように、intとして必要です。

以前のコードでは、doubleは1未満(つまり0.987)であり、次に小数点以下の桁数を掛けて実数の正の整数にします(ただし、それでもdoubleとして格納されます)点)。多分それはランダムな丸めと関係がありますか?

4

1 に答える 1

3

浮動小数点値をにキャストすると、値intが切り捨てられます(の下限が返されます)。浮動小数点数は本質的に不正確であるため、問題が発生する可能性があります。代わりに数値を四捨五入してみてくださいintvariable = (int)(0.5 + variable)fmod浮動小数点除算の余りを計算する関数にも興味があるかもしれません( http://www.cplusplus.com/reference/cmath/を参照)。

于 2013-01-27T21:00:03.407 に答える