Показать сообщение отдельно
Старый 25.09.2014, 11:13   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
! AX2012: базовые типы и результаты операторов div и mod отличаются в X++ и в CIL
Наткнулся недавно на одну неожиданную особенность поведения операторов div и mod в CIL, заключающуюся в том, что они по-разному преобразуют операнды к нужным им типам и выдают иногда разные результаты разных базовых типов по сравнению с X++. Отличия на примерах представлены ниже:
Код:
                                 X++                            CIL
тестовая операция   тип результата    результат    тип результата    результат
------------------------------------------------------------------------------
         0 div 2    Integer                   0    Int64                     0
  intMax() div 2    Integer          1073741823    Int64            1073741823
 realMax() div 2    Integer          1073741823    Int64      4999999999999999
int64Max() div 2    Int64   4611686018427387903    Int64   4611686018427387903
  intMax() mod 2    Integer                   1    Integer                   1
 realMax() mod 2    Integer                   1    Real                   1,00
int64Max() mod 2    Int64                     1    Int64                     1
Проверялось в AX 2012 R2 на ядрах сборок 6.2.1000.4051 (CU7) и 6.2.1000.8310.
За это сообщение автора поблагодарили: belugin (7), Logger (3), Krash (1), MikeR (5), Kabardian (7).