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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.08.2004, 11:14   #1  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Вот еще некоторые любопытные факты из жизни конвертации чисел в boolean, немножко проливающие свет на то что находится под капотом сего глюка:

PHP код:
static void Job4(Args _args)
{
    
boolean b;
    
real x;
    
int ij;
    ;
    
// Финт ушами №1, крест на явной конвертации real->boolean
    // хотя в language guide написано что всё должно быть пучком
    
0.7;
    
x;
    if ( 
info"TRUE" ); else info"FALSE" );
    if ( 
info"TRUE" ); else info"FALSE" );
    
    
// Финт ушами №2, принуждение к неявной конвертации спасает дело даже
    // если целью является явная ( a && true = a )
    
= -512;
    if ( 
info"TRUE" ); else info"FALSE" );
    
= -512 && true;
    if ( 
info"TRUE" ); else info"FALSE" );

    
// Финт ушами №3, немного проясняющий странность поведения явной конвертации 
    // чисел в boolean. boolean на самом деле оказывается байтом в котором
    // дамгардовцы пытаются сохранить нижние 8 бит исходного числа, что у них
    // плохо получается если это число - отрицательное
    
for ( 250<= 260i++ )
    {
        
i;
        
b;
        
infoint2str) + "->" + (b?"true":"false") + "->" int2str) );
    }
    for ( 
= -250>= -260i-- )
    {
        
i;
        
b;
        
infoint2str) + "->" + (b?"true":"false") + "->" int2str) );
    }

И всё становится ясно!

ВИДИМО где то в недрах интерпретатора Axapta присваивание переменной булевского типа использует следующий алгоритм конвертации (записано на языке C):

byte int2bool( int i )
{
return i > 255 ? 255 : i;
}

По вине разработчиков случай на i < 0 никак не обрабатывается, что приводит к урезанию ответа до последнего байта в этом случае и как следствие некорректному результату при i < 0 и кратных 256.
Теги
recid, баг, ошибка, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
if (record) vs if (record.RecId) kashperuk DAX: Программирование 18 27.11.2008 18:53
Как сформировать RecId Arahnid DAX: Программирование 18 14.07.2008 15:02
поля, содержащие RecId somebody DAX: Программирование 15 16.05.2008 17:50
aEremenko: Дефрагментация RecID Blog bot DAX Blogs 2 06.03.2007 22:25
Два RecId у одной записи таблицы sparur DAX: Программирование 33 18.12.2006 15:56

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:13.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.