Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Потому, что число 0.0007 не может быть точно представлено двоичным кодом. Получается 0.000699999999999. При приведении типов от дабл к инт дробная часть просто отбрасывается. Потому и получается 6.
При нормализации разности Вы получите что-то типа 0.0007000000000001. Дальше аналогично.
При округлении обычно работает правило +0.5 и отбрасывание дробной части - потому тоже получается 7.
Спасибо. Терь всё понятно.
Если кому нужно - не каждую дробную часть десятичного числа можно представить точно двоичной дробью.
Т.е. в двоичной системе сдвиг влево - умножение на 2, сдвиг в право - деление на 2.
дробная часть в десятичной системе выглядет так (1/2+1/4+1/8+1/16+1/32+...) по разрядам соответственно.
(именно их и можно представить точно - 0,5; 0,25; 0,125 и тд. ).
1 вариант.
int start()
{
int delta;
delta=(1.0548-1.0541)/Point;
Comment(delta);
return(0);
}
Результат: delta = 6, а внутренне 6.9999999999999999...
(Т.е. при переводе числа 0.0007 из десяточной в двоичную - 0.0000000000101101111000000000110100011011011100010111010110001110, и обратно - 0.00069999999999999999 ),
Если взять другой вариант с 0.00007 то он будет работать без нормализации и прочего...
int start()
{
int delta;
Point=0.0001;
delta=(1.10588-1.10581)/Point*10;
Comment(delta);
return(0);
}
Результат: delta =7, а внутренне 0.00007000000000000001.
Это следствие архитектуры компьютера и не связано с языком программирования или операционной системой. Единственный класс десятичных дробей, который точно представим - это те, что состоят из 0 и 1. Типа 0.001111000011111 в любой последовательности.
Не мне вас учить, но на скока я прошарил эту тему то можнно тока 0,5; 0,25; 0,125 и тд.
Как можно представить одну десятую(сотую, тысячную....) часть единицы - одной второй(четвертой, восьмой, шестнадцатой....)? с учетом 64 разрядов (8байт) конечно, а не бесконечночти...
Пример - 0,1 (десятичн.) -в двоичную 0.0001100110011001100110011001100110011001100110011001101000000000, обратно
0.10000000000000000555.
При уменьшении разрядов соответственно погрешность будет только расти...
Не мне вас учить, но на скока я прошарил эту тему то можнно тока 0,5; 0,25; 0,125 и тд.
Как можно представить одну десятую(сотую, тысячную....) часть единицы - одной второй(четвертой, восьмой, шестнадцатой....)? с учетом 64 разрядов (8байт) конечно, а не бесконечночти...
Пример - 0,1 (десятичн.) -в двоичную 0.0001100110011001100110011001100110011001100110011001101000000000, обратно
0.10000000000000000555.
При уменьшении разрядов соответственно погрешность будет только расти...
Да, Вы правы - это я несколько погорячился с ответом.
И ещё такой вопрос - у меня почему то действительные числа более 4 знаков (после запятой) типа 1.554878, окргуляются до 4 знака. Т.е. будет 1.5549.
пример
Выдает: 1.1059.
У кого-нибудь такое было?
ЗЫ пробовал и с alert и print, тоже самое...
И ещё такой вопрос - у меня почему то действительные числа более 4 знаков (после запятой) типа 1.554878, окргуляются до 4 знака. Т.е. будет 1.5549.
пример
Выдает: 1.1059.
У кого-нибудь такое было?
ЗЫ пробовал и с alert и print, тоже самое...
https://docs.mql4.com/ru/common/Print