Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй статью. Получи вознаграждение!
Dmitry Vasilyev
346
Dmitry Vasilyev 2012.01.06 13:31 
билд терминала 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");
}

}

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

Рустам
3604
Рустам 2012.01.06 13:32  
Считаю, что прежде чем вам "считать", неплохо бы ознакомиться вот с этим : https://www.mql5.com/ru/forum/131853
Victor Nikolaev
Модератор
14088
Victor Nikolaev 2012.01.06 13:33  
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");
}

}

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


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

Андрей
1890
Андрей 2012.01.06 15:00  
Скажите спасибо мудакам, которые сделали у чисел с плавающей запятой
двоичную экспоненту (в С++ та же хрень).
Alexey
52
Alexey 2012.01.07 07:56  

Na-Krul:

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


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

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

if (MathAbs(12.0-d)<0.0000001)

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий