Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Они уже зарабатывают с помощью Маркета. Зарабатывай и ты!
pavard
47
pavard 2014.08.27 23:12 

столкнулся с проблемой - сверка двух матриц ( эталонной и вычесленной ) - дает отрицательный результат, при том что распечатанные они выглядят идентично.

взял разность, распечатал - получилась почти нулевая матрица ( где-то нули со знаком - ).

понятно что дело в округлении при печати и лучше проверять на равенство методом ( a - b ) < 10^(-n)

так вот какую n максимальную следует запользовать? эмпирический тык не предлагать.

anonymous
364
anonymous 2014.08.27 23:37  
parad:
 

так вот какую n максимальную следует запользовать? эмпирический тык не предлагать.

Погуглите по ключевым словам "machine epsilon".
Ihor Herasko
8456
Ihor Herasko 2014.08.28 06:55  
parad:

понятно что дело в округлении при печати и лучше проверять на равенство методом ( a - b ) < 10^(-n)

При печати используйте:

DoubleToStr(value, 16);

 А для сравнения двух вещественных с максимальной точностью в MQL4/5 есть константа DBL_EPSILON.

pavard
47
pavard 2014.08.28 06:59  
anonymous:
Погуглите по ключевым словам "machine epsilon".


спасибо.
Vladyslav Goshkov
1960
Vladyslav Goshkov 2014.08.28 19:03  
parad:

столкнулся с проблемой - сверка двух матриц ( эталонной и вычесленной ) - дает отрицательный результат, при том что распечатанные они выглядят идентично.

взял разность, распечатал - получилась почти нулевая матрица ( где-то нули со знаком - ).

понятно что дело в округлении при печати и лучше проверять на равенство методом ( a - b ) < 10^(-n)

так вот какую n максимальную следует запользовать? эмпирический тык не предлагать.


double GetEps()
{
    double eps = 1.0;//
    while((1+eps)>1) eps*=0.1;
    return(eps*10);
}
Ihor Herasko
8456
Ihor Herasko 2014.08.28 19:50  
VladislavVG:



У кода недостаточная точность )))

Правильный ответ не

0.0000000000000010, а

0.0000000000000002.

Это и есть значение DBL_EPSILON.

Vladyslav Goshkov
1960
Vladyslav Goshkov 2014.08.28 21:41  
Scriptong:


У кода недостаточная точность )))

Правильный ответ не

0.0000000000000010, а

0.0000000000000002.

Это и есть значение DBL_EPSILON.


нужна большая точность, используйте eps/=2; - получите искомое. Принцип тот же, а более точный ответ 2,2204460492503131e-016 - это, кстати, и в документации написано ))))))).
Ihor Herasko
8456
Ihor Herasko 2014.08.29 06:52  
VladislavVG:

ответ 2,2204460492503131e-016 - это, кстати, и в документации написано ))))))).
Ну вот и я о том же - "все украдено до нас" (с)
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий