WTF? MathMod(1.01,0.001) == 0.001??? - страница 3

 
Igor Makanu:

Это всё замечательно, но double и float не подходят для финансового учета.

 
Igor Makanu:

Тут все правильно и я с этим согласен, но эти выкладки о погрешности вычисления я в советник не вставлю. Возвращаемся на землю, MathMod(1.01,0.001) == 0.001 и это сточки зрения математики чушь. Предложи свое решение, как пользоваться функцией MathMod, чтобы MathMod (1.01,0.001) было равно нулю. У меня выше уже было решение.

 
PapaYozh:

Это всё замечательно, но double и float не подходят для финансового учета.

угу, Decimal нужен, но думаю, что мы  (юзеры) тоже  с этим Decimal найдем кучу неразрешимых проблем )))

Mikhail Nazarenko:

Возвращаемся на землю, MathMod(1.01,0.001) == 0.001 и это сточки зрения математики чушь

ну да, вот Вы наконец то и пришли к выводу, что все компьютеры на Земле работают не правильно... с точки зрения математики (я на полном серьезе!!! ) , к сожалению это так... так задумано, как говорят деды: "всем не угодишь"

Mikhail Nazarenko:

Предложи свое решение, как пользоваться функцией MathMod, чтобы MathMod (1.01,0.001) было равно нулю. У меня выше уже было решение.

вопрос не правильно ставите, вопрос Ваш - как с необходимой точностью решить  MathMod(1.01,0.001) == 0.001    - эту задачу, как раз, Вы и решили


а работает все правильно и без граблей.... так сказать по стандарту IEEE  - не вижу смысла обсуждать стандарты

 
Igor Makanu:

угу, Decimal нужен, но думаю, что тоже мы (юзеры) с этим Decimal тож найдем кучу проблем )))

ну да, вот Вы наконец то и пришли к выводу, что все компьютеры на Земле работают не правильно... с точки зрения математики (я на полном серьезе!!! ) , к сожалению это так... так задумано, как говорят деды: "всем не угодишь"

вопрос не правильно ставите, вопрос Ваш - как с необходимой точностью решить  MathMod(1.01,0.001) == 0.001    - эту задачу, как раз, Вы и решили


а работает все правильно и без граблей.... так сказать по стандарту IEEE  - не вижу смысла обсуждать стандарты

Я рад что поставил под сомнение работу всех компьютеров. Спасибо.) Мне глубоко всеравно на IEEE и все ее половые трудности. Я сделал костыль и для решения моих задач округление до 8 го знака думаю достаточно.

 
Mikhail Nazarenko:

Тут все правильно и я с этим согласен, но эти выкладки о погрешности вычисления я в советник не вставлю. Возвращаемся на землю, MathMod(1.01,0.001) == 0.001 и это сточки зрения математики чушь. Предложи свое решение, как пользоваться функцией MathMod, чтобы MathMod (1.01,0.001) было равно нулю. У меня выше уже было решение.

с точки зрения MQL  MathMod(1.01,0.001) == 0.001 так-же чушь... то есть MQL с математикой согласен :-)

void OnStart()
{
   double a=1.01;
   double b=0.001;
   double c=0.001;
   double a_mod_b=MathMod(a,b);
   PrintFormat("a=%.8f",a);
   PrintFormat("b=%.8f",b);
   PrintFormat("c=%.8f",c);
   PrintFormat("a mod b=%.8f",a_mod_b);
   if (a_mod_b == c) {
      PrintFormat("a mod b=c? true");
   } else {
      PrintFormat("a mod b=c? false");
   }
   if (a_mod_b < c) {
      PrintFormat("a mod b<c? true");
   } else {
      PrintFormat("a mod b<c? false");
   }
}

то есть ваше возмущение основано на недопонимании как работают double и Print

то есть тема топика 

 MathMod(1.01,0.001) == 0.001

полная ерунда, это не так



 
Igor Makanu:

угу, Decimal нужен, но думаю, что мы  (юзеры) тоже  с этим Decimal найдем кучу неразрешимых проблем )))

Я вижу решение проблемы в создании собственного класса. Благо, фортматы и алгоритмы придуманы до нас :)

 
Igor Makanu:


ну да, вот Вы наконец то и пришли к выводу, что все компьютеры на Земле работают не правильно... с точки зрения математики (я на полном серьезе!!! ) , к сожалению это так... так задумано, как говорят деды: "всем не угодишь"

 Ну, нет. Это проблема у процессоров и информационных систем, которые не реализовали корректную работу с десятичными числами.

Банки же работают без этого косяка.

 
PapaYozh:

 Ну, нет. Это проблема у процессроров и информационных систем, которые не реализовали корректную работу с десятичными числами.

Банки же работают без этого косяка.

остаётся написать советник "epsilon" эксплуатирующий ошибку представления десятичных дробей в double :-)

 
Maxim Kuznetsov:

остаётся написать советник "epsilon" эксплуатирующий ошибку представления десятичных дробей в double :-)

с какой стати тут написание советника?

 
PapaYozh:

с какой стати тут написание советника?

место такое :-)

Причина обращения: