Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Kadet безнадёжен...
:))) Ну, дык скажите мне одно, Ваше Величество... :)))
Как мне цихирю "1е+\-300" присвоить константе? Типа:
Уж не обессутте, снизойдите до нас, невежд...;)))
Откройте мне глаза... ;)))
Что Вам ещё по программированию рассказать? Может ещё Assembler поразбираем?
Вот вот, расскажите как с помощью DLL задать 1E-300,
с Ассемблера начать - можно.
Не удержался.
Половине ораторов, в том числе и топикстартеру, срочно учить матчасть. Прежде всего, нужно уяснить, чем отличается разрядность от кол-ва значащих цифр? Ну и после этого прийти к выводу, что стандартной ф-ии, которая напечатает 1е-300 - нет. А возможность работы с такими числами проверить очень просто (сам не проверял, но уверен, что работает):
P. S. А все говорят - поиск. К чему поиск, если половина участников не понимает того, о чём пишет
Ваш Вариант будет работать. Хоть по отдельности числа смысла не имеют - если проверять каждое в отдельности принтом получим нули (это предположительно - у меня под линуксом терминал падает при попытке распечатать принтом значения :) ). Но оба попадают в диапазон и различаются менее чем размерность мантиссы.
Теперь контрольный выстрел ;) :
double dp=50, bp=-200;
double x = MathPow(0.1, bp );
double y = MathPow(0.1, bp+dp);
double z = MathPow( 10, dp );
double d = NormalizeDouble(x/y, 0);
//Print("x = ",x);
//Print("y = ",y);
//Print("z = ",z);
if ( d == z) Print(" URA !"); else Print("ERROR !");
Будет выдавать URA ! при вашем значении dp=2, будет выдавать URA ! и при dp=10, а вот при текущем будет выдавать ERROR ! - разница более чем количество значащих.
Хотя, если бы не ограничения на значащие, должен был бы выдать одинаковый результат.
Успехов.
Вот вот, расскажите как с помощью DLL задать 1E-300,
с Ассемблера начать - можно.
А что, для того, чтобы в MQL задать обычное число нужно DLL-ку писать...
Да проще в С++ весь модуль написать и уже его в DLL-ку скомпеливросать, причём программулина-то на С уже написана...
Ваш Вариант будет работать. Хоть по отдельности числа смысла не имеют...
Угу! Немного не успел, Вы меня опередили.
"Всё, что угодно" - оно же ведь тоже не просто так. Оно ведь тоже подчиняются общим правилам х=MathPow(0.1,i). Хоть сами числа х=MathPow(0.1,i) и y=MathPow(0.1,(i-2)) по отдельности и не будут иметь ожидаемые значения, но при таком раскладе, (1е+i)/(1e+(i-2)), соотношение между ними (=100) всё равно будет всегда сохраняться.
Вот вот, расскажите как с помощью DLL задать 1E-300,
с Ассемблера начать - можно.
А что, для того, чтобы в MQL задать обычное число нужно DLL-ку писать...
Да проще в С++ весь модуль написать и уже его в DLL-ку скомпеливросать, причём программулина-то на С уже написана...
Ну так осваивайте MQL, еще не такое увидите)))
Будет выдавать URA ! при вашем значении dp=2, будет выдавать URA ! и при dp=10, а вот при текущем будет выдавать ERROR ! - разница более чем количество значащих.
Хотя, если бы не ограничения на значащие, должен был бы выдать одинаковый результат.
Собственно, своим постом хотел показать, что с чрезвычайно мелкими числами (как и с чрезвычайно большими) вполне можно работать. Но у Вас всё-равно нет полного понимания - сравнивать что-то нужно используя требуюмую точность. В Вашем случае можно писать: if ( d - z < MathPow(10, dp / 2)) Print(" URA !"); else Print("ERROR !"); и всё работает.
Как мне цихирю "1е+\-300" присвоить константе? Типа:
Уж не обессутте, снизойдите до нас, невежд...;)))
Откройте мне глаза... ;)))
Никак. Только отдельные переменные, в init инициализированные (а какая разница, раз константы?). В общем, без таких констант можно обойтись
Собственно, своим постом хотел показать, что с чрезвычайно мелкими числами (как и с чрезвычайно большими) вполне можно работать. Но у Вас всё-равно нет полного понимания - сравнивать что-то нужно используя требуюмую точность. В Вашем случае можно писать: if ( d - z < MathPow(10, dp / 2)) Print(" URA !"); else Print("ERROR !"); и всё работает.
По поводу понимания, собственно, у меня есть сомнения на Ваш счет. Не с любыми мелкими (крупными) числами можно корректно работать и даже не с любыми числами, попадающими в диапазон реализованный для типа - только тогда, когда результатом операции не упираетесь в ограничения: нет переполнения или потери машинной точности. Именно по этому важно понимать диапазон изменений и количество значащих.
По поводу правильного сравнения чисел с плавающей точкой не поленитесь порыться в соотвествующих ветках - я там писал. Потом будете рассказывать ;). В данной ветке речь шла не об этом.
Успехов.
По поводу понимания, собственно, у меня есть сомнения на Ваш счет. Не с любыми мелкими (крупными) числами можно корректно работать и даже не с любыми числами, попадающими в диапазон реализованный для типа - только тогда, когда результатом операции не упираетесь в ограничения: нет переполнения или потери машинной точности. Именно по этому важно понимать диапазон изменений и количество значащих.
По поводу правильного сравнения чисел с плавающей точкой не поленитесь порыться в соотвествующих ветках - я там писал. Потом будете рассказывать ;).
В данной ветке речь шла не об этом.
Успехов.
Когда человек сомневается - это хорошо. Когда он сомневается по поводу других - это плохо. Побеждает самый крикливый. За сим раскланяюсь. Всем успехов.
Когда человек сомневается - это хорошо. Когда он сомневается по поводу других - это плохо.
ИМХО - Еще хуже, когда человек не сомневается в некомпетентности других и сходу развешивает ярлыки, даже не удосужившись сделать попытку вникнуть в тему обсуждения.
Вам также успехов.