Продолжение про ошибки.... Господа разработчика, эта ошибка уже системная, так сказать!!! ... Не обижайтесь, ладно.
И ордера не модифицировать типа ошибка 1 вылазает и пр.
Вот сообственно о чем я веду речь...
Сделайте скрипт и удивитесь.
Вставьте округление, чтобы не наступать на грабли, которые сами подложили :)
i = MathRound(d/Point); i2 = MathRound((i*Point)/Point);
Это в теории от перестановки операций результат не меняется, в реальном мире вычисления вещественных чисел на компьютере всегда будет иметь небольшую погрешность. Эта погрешность может накапливаться и давать такие "чудеса".
Продолжение про ошибки.... Господа разработчика, эта ошибка уже системная, так сказать!!! ... Не обижайтесь, ладно.
И ордера не модифицировать типа ошибка 1 вылазает и пр.
Вот сообственно о чем я веду речь...
Сделайте скрипт и удивитесь.
Вставьте округление, чтобы не наступать на грабли, которые сами подложили :)
i = MathRound(d/Point); i2 = MathRound((i*Point)/Point);
Это в теории от перестановки операций результат не меняется, в реальном мире вычисления вещественных чисел на компьютере всегда будет иметь небольшую погрешность. Эта погрешность может накапливаться и давать такие "чудеса".
Да!
тут речь не о ошибке округления а об ошибке в ОДИН пункт... Или 0.0001 цены... 0.0001 это не ошибка которой можно принебречь -- с этим надо что-то делать...
Запустите скрипт посмотрите ... на 17000 пунктов где то 200 ошибок. Попробуйте.
Да!
тут речь не о ошибке округления а об ошибке в ОДИН пункт... Или 0.0001 цены... 0.0001 это не ошибка которой можно принебречь -- с этим надо что-то делать...
Запустите скрипт посмотрите ... на 17000 пунктов где то 200 ошибок. Попробуйте.
Я пробовал. После вставки округления - ноль ошибок.
int i,i2,i3; ... i = d/Point; ...
Другими словами:
int i = double D/ Point;
значение Point обычно тоже double
int i,i2,i3; ... i = d/Point; ...
Другими словами:
int i = double D/ Point;
значение Point обычно тоже double
Скажите, а можно чтобы было еще смешнее еще сразу и выводы писать... ?
MProgrammer, Вы же профессиональный программист.
Разве Вы не замечаете что при вычислении целого числа i в Вашем коде используются два числа с типом double?
Уж как ни Вам не знать, что это ведет к потерям точности и конечно же ошибкам вычислений в результате?
А смысл вот этого цикла имеет сакральный смысл? :
for ( int j=0; j<TotalTry; j++ ){ i = d/Point; i2 = (i*Point)/Point; i3 = i - i2; if ( i3 != 0 ){ Print("d:",d,",ОШИБКА:",i3,"(",i3*Point,")"); ErrorCount++; }
Ведь кроме ErrorCount, там больше ничего не меняется, при изменении j.
Для примера скрипт, с наглядным примером. Думаю, разберетесь...
int start()
{
int x,y;//!!!
double q;
int a=5;
int b=10;
double c=0.24;
double d=0.4;
x=b/a;
y=c/d;// !!!
q=c/d;// !!!
Print(x," ",y," ",q);
return(0);
}
Ведь кроме ErrorCount, там больше ничего не меняется, при изменении j.
Там в цикле d меняется - комменты и оператор за ними - часть цикла.
Успехов.
Ведь кроме ErrorCount, там больше ничего не меняется, при изменении j.
Там в цикле d меняется - комменты и оператор за ними - часть цикла.
Успехов.
Если не затруднит, укажите где именно в приведенном цикле происходит изменение переменной d.
Вероятно, мой браузер не может отобразить эту фантомную часть кода, строка
d+=Point ;
находится вне тела цикла.
d+=Point ;
находится вне тела цикла.
Да вроде в цикле...
Ведь в самом цикле есть еще одна открывающая скобка:
if ( i3 != 0 ){
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Продолжение про ошибки.... Господа разработчика, эта ошибка уже системная, так сказать!!! ... Не обижайтесь, ладно.
И ордера не модифицировать типа ошибка 1 вылазает и пр.
Вот сообственно о чем я веду речь...
Сделайте скрипт и удивитесь.