Будьте чрезвычайно тщательным использованием любого из других предложений. Все это зависит от контекста.
я провел долгое время, прослеживая ошибки в системе, которая предположила a==b
если |a-b|<epsilon
. Базовые проблемы были:
неявное предположение в алгоритме, что, если a==b
и b==c
тогда a==c
.
Используя тот же эпсилон для строк, измеренных в дюймах и строках, измеренных во фрезах (.001 дюйм). Это a==b
, но 1000a!=1000b
. (Поэтому AlmostEqual2sComplement просит эпсилон или макс. ULPS).
использование того же эпсилона и для косинуса углов и для длины строк!
Используя такой сравнивать функцию с элементами сортировки в наборе. (В этом случае с помощью встроенного оператора C++ == для удваивается, привел к корректным результатам.)
Как я сказал: все это зависит от контекста и ожидаемого размера a
и b
.
BTW, std::numeric_limits<double>::epsilon()
является "эпсилоном машины". Вот в чем разница между 1,0 и следующее значение, представимое двойным. Я предполагаю, что это могло использоваться в сравнить функции, но только если математические ожидания - меньше чем 1. (Это в ответ на ответ @cdv...)
кроме того, если Вы в основном имеете int
арифметика в [1 111] (здесь, мы используем, удваивается для содержания международных значений в определенных случаях) арифметика будет корректна. Например, 4.0/2.0 совпадет с 1.0+1.0. Это, пока Вы не делаете вещей, которые приводят к частям (4.0/3.0) или не выходят на улицу из размера интервала
Просто добавьте дополнительные параметры строки запроса.
Например, чтобы передать параметры
Date: 2009-06-01
MachineID: Machine1, Machine2, Machine3, Machine4
в отчет с именем Папка \ MyReport
на сервере с именем server
, вы должны использовать URL:
http://server/reportserver?%2fFolder%2fMyReport&rs:Command=Render&Date=2009-06-01&MachineId=Machine1&MachineId=Machine2&MachineId=Machine3&MachineId=Machine4