Как избавиться от ошибки деления на 0? - страница 2

 
Александр Алексеевич:
и еще проблема 

если в функцию подаем значение равное 48, Out = 1, если подать -12,23 Out=0, вот как так то?

1 целое. 1/2 равно ноль. 1.0/2.0 равно 0.5 и кстати 1/2.0 и 1.0/2 тоже ноль.
 
Valeriy Yastremskiy:
1 целое. 1/2 равно ноль. 1.0/2.0 равно 0.5 и кстати 1/2.0 и 1.0/2 тоже ноль.

Если в выражении есть хоть одно вещественное значение, то все выражение приводится к вещественному типу. Поэтому 0 справедлив только для 1/2. Во всех остальных случаях получаем 0.5

Другое дело, если написать так:

1 / 2 * 2.0

Здесь результат 0.0, а не 1.0, т. к. сначала вычисляется выражение 1 / 2 без приведения к double. И только потом все выражение приводится к double.

 
Ihor Herasko:

Если в выражении есть хоть одно вещественное значение, то все выражение приводится к вещественному типу. Поэтому 0 справедлив только для 1/2. Во всех остальных случаях получаем 0.5

Другое дело, если написать так:

Здесь результат 0.0, а не 1.0, т. к. сначала вычисляется выражение 1 / 2 без приведения к double. И только потом все выражение приводится к double.

да. Ошибся, у себя в коде round(double()/Period()) дал 0. round изменил тип переменной на целое.( Надо следить за типами в формулах)

  VTrend1[i] = round ( 60 * (RXt1[i] / (NbXt1[i+1] - NbXt1[i])) / Period())  ;
 
Valeriy Yastremskiy:
1 целое. 1/2 равно ноль. 1.0/2.0 равно 0.5 и кстати 1/2.0 и 1.0/2 тоже ноль.

Да все верно) как только исправил константы на вещественные ( 48.0), то стало все нормально считать) Будем надеяться что будет работать))) Потом скину скрины,  того что получилось

 
Александр Алексеевич:
Добрый день, возникла проблема mql4 не правильно расчитывает формулу :
1/MathPow(2.71,x) выдает ошибка деления на 0. Но насколько я помню со школьной программы такого быть не может)

избавиться можно так

if(MathPow(2.71,x) !=0)...1/MathPow(2.71,x)

остальное написано выше

 
Renat Akhtyamov:

избавиться можно так

if(MathPow(2.71,x) !=0)...1/MathPow(2.71,x)

остальное написано выше

Ренат, было бы так просто))) пробую создать нейросеть средствами mql, но все упирается в вычисления)  MathPow(2.71,x) - никогда не может равняться 0. а вот mql считает иначе))) точно так же как и 1/1+exp(-x) не может равняться 1

 
Александр Алексеевич:

Ренат, было бы так просто))) пробую создать нейросеть средствами mql, но все упирается в вычисления)  MathPow(2.71,x) - никогда не может равняться 0. а вот mql считает иначе))) точно так же как и 1/1+exp(-x) не может равняться 1

Ты не поверишь, но, то же самое открытие, тебя будет ждать и во всех остальных ЯП. Для подобной математики, специальные библиотеки создают.
 
Vladimir Simakov:
Ты не поверишь, но, то же самое открытие, тебя будет ждать и во всех остальных ЯП. Для подобной математики, специальные библиотеки создают.
Можно по подробнее))) 
 
Александр Алексеевич:
Можно по подробнее))) 

IEEE 754 - это стандарт представления числа с плавающей точкой, так сказать, для общего развития.

А 0 получается, потому, что CPU пофигу, что 0 не может там быть по правилам математики. Получились там, при вычислении, нули в 63 младших битах, вот и получай +/- 0.0 на выходе), в принципе, как и на любом калькуляторе

 
Vladimir Simakov:

IEEE 754 - это стандарт представления числа с плавающей точкой, так сказать, для общего развития.

А 0 получается, потому, что CPU пофигу, что 0 не может там быть по правилам математики. Получились там, при вычислении, нули в 63 младших битах, вот и получай +/- 0.0 на выходе), в принципе, как и на любом калькуляторе

А как избежать этого? Как можно округлить?))) 
Причина обращения: