Пытаюсь решить кардинально:
double MachineEpsilon = MathPow(5.00,-16); double MaxRealNumber = MathPow(1.00,300); double MinRealNumber = MathPow(1.00,-300);
Печатаю результат. Выдаёт:
MachineEpsilon = 0.00 MaxRealNumber = 1.00 MinRealNumber = 1.00
Извиняюсь за любопытство, а какой результат вы ожидали от возведения единицы в любую степень? А на пятерку похоже разрядности уже не хватает, т.е. ноль в сухом остатке. Всё правильно.
double z = 5 / 2; // выдаёт целое z = 2.00;
А явного преобразования из int в double на MQL-4 нет.
Как выходить из подобных ситуаций?
За такие вопросы, по-моему, пора уже банить на форуме. Это просто свинство.
Пытаюсь решить кардинально:
double MachineEpsilon = MathPow(5.00,-16); double MaxRealNumber = MathPow(1.00,300); double MinRealNumber = MathPow(1.00,-300);
Печатаю результат. Выдаёт:
MachineEpsilon = 0.00 MaxRealNumber = 1.00 MinRealNumber = 1.00
Извиняюсь за любопытство, а какой результат вы ожидали от возведения единицы в любую степень? А на пятерку похоже разрядности уже не хватает, т.е. ноль в сухом остатке. Всё правильно.
double z = 5 / 2; // выдаёт целое z = 2.00;
А явного преобразования из int в double на MQL-4 нет.
Как выходить из подобных ситуаций?
За такие вопросы, по-моему, пора уже банить на форуме. Это просто свинство.
писал (а):
Пытаюсь решить кардинально:
double MachineEpsilon = MathPow(5.00,-16); double MaxRealNumber = MathPow(1.00,300); double MinRealNumber = MathPow(1.00,-300);
Печатаю результат. Выдаёт:
MachineEpsilon = 0.00 MaxRealNumber = 1.00 MinRealNumber = 1.00
Извиняюсь за любопытство, а какой результат вы ожидали от возведения единицы в любую степень? А на пятерку похоже разрядности уже не хватает, т.е. ноль в сухом остатке. Всё правильно.
Это точно... Ступил, согласен... Просто уже башка кипит. А как же тогда реализовать "1E-300" ? Может так - "0.000000...001;". :) Видимо не иначе.
А насчёт поиска - От чё нашёл:
"Константы с плавающей точкой состоят из целой части, точки (.) и дробной части. Целая и дробная части представляют собой последовательности десятичных цифр.
Внутреннее представление - число двойной точности размером 8 байт. Пределы изменения от -1.7 * e-308 до 1.7 * e308. Точность обеспечивается не более, чем 15 значащими цифрами."
Попробовал представление - "1*e-300" - не получается.
Поискал поиском... Вот что нашёл:
В выражениях языка MQL4 используется только неявное приведение типов. Приоритет типов при преобразовании в порядке возрастания:
int (bool,color,datetime); double; string;
Перед выполнением операций (кроме операций присваивания) происходит преобразование в тип, имеющий наибольший приоритет, а перед операциями присваивания - в целевой тип.
Примеры:
int i = 1 / 2; // приведения типов нет, результат: 0 int i = 1 / 2.0; // выражение приводится к типу double, затем приводится к целевому типу int, результат: 0 double d = 1.0 / 2.0; // приведения типов нет, результат: 0.5 double d = 1 / 2.0; // выражение приводится к типу double, который совпадает с целевым типом, результат: 0.5 double d = 1 / 2; // выражение типа int приводится к целевому типу double, результат: 0.0 string s = 1.0 / 8; // выражение приводится к типу double, затем приводится к целевому типу string, результат: "0.12500000" (строка, содержащая 10 символов) string s = NULL; // константа типа int приводится к целевому типу string, результат: "0" (строка, содержащая один символ) string s = "Ticket #"+12345; // выражение приводится к типу string, который совпадает с целевым типом, результат: "Ticket #12345"
Приведение типов применяется не только к константам, но и переменным разных типов."
Ну и за какие провинности меня банить? Лучше на вопрос ответте, если знаете.
int=doble
все что после запятой просто теряется. Так было всегда, арифметику: процессора не утяжеляют. Сохраняют очень ценное Быстродействие процессора.
Такое приведение называется "усечение дробной части".
/*поэтому*/ int a=1/2; //а=0<.5> =0
Арифметически правильное приведение double к int это отдельная ресурсозатратная функция NormalizeDouble()
int a=NormalizeDouble(1/2,0) //a=<0.5>=1
т.к. результат >=0.5 то по бухгалметрским правилам округляется до единицы.
Соотвественно int a=NormalizeDouble(1000000/2000001,0) //a=<0.49999> =0
P.S.
to kharko
Извините, что влез, пока постил не видел, что Вы ответили.
Бесполезно.
double z = NormalizeDouble(1/2,10); Print ("z = ", z); /******* z = 0 z = 0 ... z = 0
Во... Нашёл форму:
double z = NormalizeDouble(1,10)/NormalizeDouble(2,10); /*************** z = 0.5
О, заморочки, балин... :))) Т.е. каждое слагаемое, числитель, знаминатель и пр. нужно нормализовывать персонально.
int=doble
...
Та то всё понятно, только я ж не из double в int, а из int в double перевожу. С int как раз всё понятно. Просто отбрасывает 4 байта поле запятой и всё (это по простому)...
А вот, что делать с "1Е-300"? Можно это число как-то в программу загнать не описывая по тупому - "0.000...001"?
double z = 1.0/2.0;
А вот, что делать с "1Е-300"? Можно это число как-то в программу загнать не описывая по тупому - "0.000...001"?
MathPow(0.1,300);
Ну и за какие провинности меня банить? Лучше на вопрос ответте, если знаете.
По форуму сделай поиск, не ограничивайся первыми двумя строчками. Этот вопрос отвечался сотни раз. За это и банить, что ты в сто первый раз спрашиваешь.
Иван Грозный убил своего сына за то, что тот тупо задавал вопросы, а не пользовался поиском.
О, заморочки, балин... :))) Т.е. каждое слагаемое, числитель, знаминатель и пр. нужно нормализовывать персонально.
Нет, просто надо следить за тем что считаете. Если надо при целочисленном делении получить дабл, укажите это явно:
int x = 5; int y = 2; double z = 1.0*x/y;
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Господа!
Тупой, конечно вопрос, однако же никак не могу врубиться.
Мне нужно установить константы:
Выдаёт ошибку. "Ругается" на запись "5E", "1E" и т.п. Пытаюсь так - "5е-16", "1е+300"... Результат то же.
Пытаюсь решить кардинально:
Печатаю результат. Выдаёт:
Не могу врубиться в чём "собака порылась". Вроде записи типа "5Е+16" - любой программой воспринимается правильно, а тут...
Плюсь к тому же уже не первый раз сталкиваюсь с проблемой, когда присваивая к типу double чего-нибудь, в особенности если в правой части выражения идут int - выдаёт так же целое, даже если идёт деление, где явно - с плавающей, а выдаёт всё равно - целое.
А явного преобразования из int в double на MQL-4 нет.
Как выходить из подобных ситуаций?