Я использую NS-3 (написанный на C++) для имитации сетевой среды.Странная математическая ошибка при сравнении двух двойных значений в NS-3 C++
Я использую класс flowmonitor для записи показателей производительности из беспроводной линии.
Единственное, что я собираю, это временная дисперсия между текущей и предыдущей задержкой пакета или «джиттером».
Чтобы получить это, я вычитаю значение времени (преобразованное в двойную переменную) одной задержки пакета в предыдущее значение.
т.е.
0,0159051 - 0,0158002 = 0,0001049
Однако, через некоторое время математика, кажется, действует очень странно, такие как:
0.0159003 - 0.0158007 = 9.95972e-05
когда это ответ должен быть явно 0,0000996
Чтобы подробнее остановиться, я первоначально использовал функцию diff, чтобы найти разницу.
template <typename T1, typename T2>
double diff(const T1& lhs, const T2& rhs)
{
std::cout << lhs << " - " << rhs << std::endl;
return lhs - rhs;
}
Но так как я обнаружил ошибку, я попробовал прямое вычитание, но получаю ту же ошибку.
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – knivil