AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.10.2004, 09:47   #1  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Здравствуйте дети! :)
Продолжаем занятия!
Добрые дяди из МБС задали вам очень интересную задачку!
Попробуйте ее решить....
Только животики от смеха не надорвите!

Создаем джоб
PHP код:
static void Summ(Args _args)
{
    
real a 9999.999999999999;
    
real b 9999.999999999999;
    ;

    print 
a;
    print 
b;
    print 
b;
    
pause;

Запускаем.
Дружно смеемся.
Старый 13.10.2004, 10:13   #2  
monk is offline
monk
Участник
 
67 / 12 (1) ++
Регистрация: 14.10.2002
X++:
static void Summ(Args _args)
{
    real a = 9999.899999999999;
    real b = 9999.999999999999;
    ;

    print a;
    print b;
    print a + b;
    pause;
}
меняю 9 на 8
Вот так все отрабатывает
Старый 13.10.2004, 10:15   #3  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
PHP код:
static void Summ(Args _args)
{
    
real a 9999.999999999999;
    
real b 9999.999999999999;
    ;

    print 
a;
    print 
b;
    print 
b;
    
pause;

Старый 13.10.2004, 10:25   #4  
dd
Гость
 
n/a
Все правильно, при печати число знаков после запятой ограниченно 2.
Это везде, в т.ч. в отчетах. Надо просто иметь это ввиду.
Не понимаю эти совершенно необоснованные наезды на MBS в этом и предыдущем обсуждении.
Старый 13.10.2004, 10:27   #5  
Хочулия is offline
Хочулия
Участник
 
13 / 10 (1) +
Регистрация: 09.09.2004
Адрес: Краснодар
прочтите, что нужно иметь в виду? что почти 10000 + почти 10000 = равно почти 10000? однако дешевенькая 1с считает это правильно.
Старый 13.10.2004, 10:41   #6  
AlexUnik is offline
AlexUnik
Участник
 
199 / 22 (1) +++
Регистрация: 01.06.2004
Адрес: Королёв
Вот это да! Теория относительности налицо :-)
Старый 13.10.2004, 10:41   #7  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Цитата:
Изначально опубликовано monk
меняю 9 на 8
Вот так все отрабатывает
Ну да.
а можно еще и одну девяточку убрать.
Дело в переполнении.
где-то неверно обрабатыватся точность округления....
на самом деле эта бага идет и при других сочетаниях....
999.9999999999999
99.99999999999999
9.999999999999999
0.9999999999999999
другие не проверял...
было бы еще более смешно, если бы еще и другие сочетания сваливались в баг....
Старый 13.10.2004, 10:42   #8  
monk is offline
monk
Участник
 
67 / 12 (1) ++
Регистрация: 14.10.2002
При чем здесь печать

static void Summ(Args _args)
{
real a = 9999.999999999999;
real b = 9999.999999999999;
real c;
;

print a;
print b;
c = a + b;
print c;
pause;
}

с = 10000
Старый 13.10.2004, 10:42   #9  
Hezl is offline
Hezl
Участник
Аватар для Hezl
 
138 / 16 (1) ++
Регистрация: 21.04.2004
Адрес: Moscow, Russia
А по-моему, это просто пасхальное яйцо (типа "=rand(200,99)" в Word ). Так как любое изменение в количестве девяток приводит к нормальной работе job'а. Интересно, как нашли такое сочетание?
Старый 13.10.2004, 10:47   #10  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Системная бага. Связана с тем, что Вы пытаетесь скормить системе 16 и более значащих цифр одновременно.

1) Зачем Вам такая точность? Хотя, финансовой системе она как раз-то не помешает...
2) Печально... бага-то налицо, и тяжкая...


С Уважением,
Георгий.
Старый 13.10.2004, 10:48   #11  
Hezl is offline
Hezl
Участник
Аватар для Hezl
 
138 / 16 (1) ++
Регистрация: 21.04.2004
Адрес: Moscow, Russia
Т.е. кол-во 9-ток должно быть равно 16. Тогда баг есть.
Старый 13.10.2004, 10:54   #12  
Hezl is offline
Hezl
Участник
Аватар для Hezl
 
138 / 16 (1) ++
Регистрация: 21.04.2004
Адрес: Moscow, Russia
Цитата:
Системная бага. Связана с тем, что Вы пытаетесь скормить системе 16 и более значащих цифр одновременно.
Дело не в точности - 9999.9999999999999 будет суммировать нормально
Старый 13.10.2004, 11:05   #13  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Посмотрите вот сюда:
http://www.axforum.info/forums/showt...&highlight=256

Думаю, что эти проблемы схожи и связаны с отвратительной реализацией математики. Неужели нельзя было как следует оттестировать?
Финансы, как-никак...


С Уважением,
Георгий.
Старый 13.10.2004, 11:15   #14  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Мне как-то не до смеха.

Вопрос как обойти эту багу ...
Ведь при любых безобидных вычислениях есть вероятность нарваться.
Старый 13.10.2004, 12:06   #15  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
...
Старый 13.10.2004, 12:29   #16  
maxsmirnov is offline
maxsmirnov
экс-модератор
 
268 / 25 (1) +++
Регистрация: 08.07.2003
Адрес: Москва
самое страшное, уважаемые коллеги, что для повторения эффекта вовсе не нужны дикие нагромождения девяток, редко встречающиеся в практике учета.

PHP код:
static void Job6(Args _args)
{
    
real a 10000;
    
real b;
    ;

    
3;
    
3;

    
a;

    print 
b;
    
pause;

предлагаю партнерам (коим я не являюсь) передать баг в МБС

и, протестируйте, пожалуйста, кто-нибудь на 2.5 и ранних сп 3.0, у меня такое ощущение, что глюк свежий, не мог такой ужас жить несколько лет незамеченным
Старый 13.10.2004, 12:36   #17  
xonix is offline
xonix
Участник
 
360 / 11 (1) +
Регистрация: 25.08.2004
Хм... Так в вашем примере как раз девятки и получаются после /3, *3
Старый 13.10.2004, 12:52   #18  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Так в том то и проблема, что получить эти девятки не так уж сложно в процессе вычислений. Т.е. это не какой-то совсем уж экзотический случай.
Старый 13.10.2004, 12:56   #19  
maxsmirnov is offline
maxsmirnov
экс-модератор
 
268 / 25 (1) +++
Регистрация: 08.07.2003
Адрес: Москва
понятное дело.
это я пытался приблизить этот глюк к реальной практике.

кстати, после замены real на amountMST глюк остается, что, впрочем, логично.
Старый 13.10.2004, 13:05   #20  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Более того! Если произвести данные вычисления напосредственно в форме (Например, Цена в Заказе)
1000/3*3 + 1000/3*3, то будет то же самое.
А вот если второе слагаемое будет отлично от первого, (хотя пусть и будет давать бесконечную дробь), то глюк вроде как не замечен...

С Уважением,
Георгий.

Странно, неужели это выяснилось впервые за столько лет?
Теги
баг, математика, округление

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Абстрактный классификатор Maxim Gorbunov DAX: Программирование 52 17.01.2005 13:52
Здравствуйте дети! :) - еще одна ошибка AKIS-Falcon DAX: Программирование 11 20.10.2004 18:28
Просмотр SQL запросов к БД с помощью файла Log Anton Sk. DAX: База знаний и проекты 3 25.01.2002 16:31
Виртуальные поля Oks DAX: Функционал 6 03.01.2002 16:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:08.