ошибки округления данных mql4

 
билд терминала 409 (от 25го октября)

следующий код пишет выводит "not equals", вместо equals, equals пишет только если d нормализовать хотя бы до NormalizeDouble(d, 8)

void start() {
double d = (1.4740 - 1.4728) / 0.0001;
if (d == 12) {
Comment("equals");
} else {
Comment("not equals");
}

}

считаю это грубой ошибкой которую часто сложно предугадать при большом объеме кода, эта ошибка создает много новых ошибок в скриптах и советниках в результате чего они часто работают не так как хочется, а процесс поиска ошибки занимает больше времени чем написание самого кода

 
Считаю, что прежде чем вам "считать", неплохо бы ознакомиться вот с этим : https://www.mql5.com/ru/forum/131853
 
Na-Krul:
билд терминала 409 (от 25го октября)

следующий код пишет выводит "not equals", вместо equals, equals пишет только если d3 нормализовать хотя бы до NormalizeDouble(d3, 8)

void start() {
double d3 = (1.4740 - 1.4728) / 0.0001;
if (d3 == 12) {
Comment("equals");
} else {
Comment("not equals");
}

}

считаю это грубой ошибкой которую часто сложно предугадать при большом объеме кода, эта ошибка создает много новых ошибок в скриптах и советниках в результате чего они часто работают не так как хочется, а процесс поиска ошибки занимает больше времени чем написание самого кода


Нельзя сравнивать действительные числа. Поищите по форуму. Ответ был дан более пяти лет назад, да и потом частенько повторялся.

 
Скажите спасибо мудакам, которые сделали у чисел с плавающей запятой
двоичную экспоненту (в С++ та же хрень).
 

Na-Krul:

следующий код пишет выводит "not equals", вместо equals, equals пишет только если d нормализовать хотя бы до NormalizeDouble(d, 8)


так и должно быть.

не нравится нормализация, сранивайте как-то так

if (MathAbs(12.0-d)<0.0000001)

Причина обращения: