浮動小数点演算で問題が発生していますが、正確ではありません。私は、すべての入力変数が次の重要な変数の約20倍も重くなる重み付き公式に基づいてスコアを計算しようとしています。しかし、入力は実数なので、結果を格納するためにdoubleを使用してしまいました。以下のコードでは、E1とE2の違いを失うという問題があります。C++の浮動小数点演算での丸めの問題を回避する方法は?
このコードはパフォーマンスに影響を受けますので、この問題に対する効率的な答えを見つける必要があります。私は入力を100倍にしてからintを使うことを考えましたが、それは最善の解決策なので疑問です。
#include <iostream>
int main()
{
double score1, score2;
float a = 2.75 ;
float b = 5.25 ;
float c = 5.25 ;
float d = 2.75 ;
float E1 = 3 ;
float E2 = 6 ;
score1 = 20 * b - 1 * a + 0.05 * d /* - 0.0025 * c*/ + 0.0001 * E1 ;
score2 = 20 * b - 1 * a + 0.05 * d /* - 0.0025 * c*/ + 0.0001 * E2 ;
std::cout << score1 << std::endl;
std::cout << score2 << std::endl;
std::cin.get();
return 0;
}
//ouputs:
//102.388
//102.388
浮動小数点は、すなわち、それはすべての浮動小数点数を表すことができない、それについての情報の多くがあります、限られています。 – Drakosha
ダブルを使用できます。非常に特殊な状況に陥っていない限り、問題にはなりません。 –