Это глюк или так и было задумано???

 
Случайно наткнулся вот на такую странную вещь. Очень простой код...

 summ = 3;
 dsumm = 3;
 Alert ( ceil ( 3 / 2 ) );
 Alert ( ceil ( summ / 2 ) );

 Alert ( ceil ( dsumm / 2 ) );

Как вы думаете, что будет выведено на экран? Сразу скажу, что не 2 2 2, хотя по логике должно быть именно это. Разум так же подсказывает, что все три цифры должны быть одинаковые... Но это не так !!! Добавим еще пару строк кода и тогда все станет ясно, что я хочу сказать... (честно говоря я в шоке от своего открытия)

 double summ;
 int dsumm;
 summ = 3;
 dsumm = 3;
 Alert ( ceil ( 3 / 2 ) );
 Alert ( ceil ( summ / 2 ) );

 Alert ( ceil ( dsumm / 2 ) );

И на экране мы получим 1 2 1
В описании функции ceil  написано, что ее аргумент должен быть double. Но согласитесь, выглядит это все как-то очень странно.

 
  double dsumm;
 
Renat Akhtyamov:
  double dsumm;

Если так, то на экране увидите 1 2 2

 
Reactor555:
Случайно наткнулся вот на такую странную вещь. Очень простой код...

 summ = 3;
 dsumm = 3;
 Alert ( ceil ( 3 / 2 ) );
 Alert ( ceil ( summ / 2 ) );

 Alert ( ceil ( dsumm / 2 ) );

Как вы думаете, что будет выведено на экран? Сразу скажу, что не 2 2 2, хотя по логике должно быть именно это. 

Смотрите, что происходит:

1) сначала рассчитывается выражение в скобках: результат для 3 / 2 будет равен 1 (это происходит потому, что 3 и 2 трактуются как целые числа);

2) после этого число преобразуется в double и передаётся в ceil().


Если вы хотите использовать double, а не int, то просто записывайте числа в формате с плавающей запятой.

 Alert ( ceil ( 3.0 / 2.0 ) );
 
Reactor555:

Если так, то на экране увидите 1 2 2

да ладно

так тогда

double summ=3.0;

double dsumm=3.0;

;)