У меня проблемы с арифметикой с плавающей запятой. Я пытаюсь рассчитать оценку на основе взвешенной формулы, где каждая входная переменная весит примерно в 20 раз больше следующей значимой. Входные данные, однако, являются действительными числами, поэтому я использовал двойной для сохранения результата. Приведенный ниже код имеет проблему потери разницы между E1 и E2.
Этот код чувствителен к производительности, поэтому мне нужно найти эффективный ответ на эту проблему. Я думал о том, чтобы умножить свои входные данные на сотню, а затем использовать 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