Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Dmitry Vasilyev
346
Dmitry Vasilyev  
билд терминала 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");
}

}

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

Рустам
3597
Рустам  
Считаю, что прежде чем вам "считать", неплохо бы ознакомиться вот с этим : https://www.mql5.com/ru/forum/131853
Victor Nikolaev
Модератор
14659
Victor Nikolaev  
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
Андрей  
Скажите спасибо мудакам, которые сделали у чисел с плавающей запятой
двоичную экспоненту (в С++ та же хрень).
Alexey
52
Alexey  

Na-Krul:

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


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

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

if (MathAbs(12.0-d)<0.0000001)

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