Баг МТ4 - разработчикам посвящается - страница 3

 

Точно старческий маразм превалирует... Прошу простить, к теме не относится.

Прсто долго не слышно было - перезд мешал?

;)

 
Andrey1979:

Поскольку вопрос задан не из-за желания поспорить, а исходя из необходимости решения реальной задачи,

Можно узнать, какой реальной задачи? Где потом используется результат этого вычисления?

Я и сам пользуюсь этой функцией, но у меня еще не было реальных задач, столь чувствительных к результату этой операции. Ну то есть да, некая погрешность в окрестности целочисленного значения результата бывает (ибо функция y=[x] имеет неустранимые разрывы при любом целом аргументе), но она, мягко говоря, некритична для целей применения.

 
Mathemat:

Можно узнать, какой реальной задачи? Где потом используется результат этого вычисления?

Я и сам пользуюсь этой функцией, но у меня еще не было реальных задач, столь чувствительных к результату этой операции. Ну то есть да, некая погрешность в окрестности целочисленного значения результата бывает (ибо функция y=[x] имеет неустранимые разрывы при любом целом аргументе), но она, мягко говоря, некритична для целей применения.

этот модулёк и у меня встретился...

;)

 
Andrey1979:

умно, НО

почему тогда результаты MathFloor(15/0.05*0.01) и MathFloor(15*0.01/0.05) отличаются?

Сначала ведь выполняется действие в скобках.

Именно здесь спрятана ошибка разработчиков, насколько я понимаю - в отличии результатов.

Есть что возразить?

И не пишите умное: "Получите "машинное епсилон" для нужного типа данных" или "если хотите детально, то пишите мне на почту".

Детально хочу, и не только я, так что выносите на всеобщее обозрение.

Думаю, многие меня поддержат.

PS. Только, пожалуйста, детально не только почему получен результат 2, а также почему результаты отличаются. Думаю, это будет сложнее! ;)

О "машинном эпсилон" я не Вам писал. Я ж говорил - не поймете.

А почему результаты разные? Элементарно, "на пальцах" будет выглядеть так : Приближения выполняются с недостатком, потому сдвиг на +"машинное епсилон", чтоб не было лишних наводок, это должен быть последний\предпоследний значащий разряд мантиссы - потому индивидуален для каждого типа данных. Для МКЛ это тип дабл, соответственно знак 15\14 ..... Теперь по поводу остального, то есть Ваших вычислений:

Действия выполняются по порядку слева направо.

В первом случае Вы оперируете числами, мантиссы которых могут быть представлены без погрешностей. Это "целое" число 300.0 и 0.01 типы то дабл, но мантиссы точные.

Во втором случае ОБА числа с погрешностью в мантиссах. Естественно Вы получаете результат с большей погрешностью. Хотите подробней - поднимайте курсы по вычислительной математике (или как там это сейчас называется).

Картинка на всяк случай :


Удачи...