float и double - проблема с компиляцией
От: Pavluha Россия  
Дата: 06.02.04 12:04
Оценка:
Первый раз столкнулся с такой проблемой:

По непонятной причине компилятор вместо констант float и double генерирует их значение без дробной части, например:

Есть функция с прототипом:

int Do(int, int, float);


В коде вызывается так:

int nRes = Do(1, 15, .8f);


Результат: в функцию в третьем параметре передается 0. Если в дебаге зайти в Do, дебаггер это показывает. Ассемблерный код вызова генерируется такой:

mov  esi, esp
push 0
push 0Fh
push 01h
call Do
mov  nRes, eax


Что самое смешное, если что-нибудь отредактировать не меняя смысла, например, стереть точку в .8f, а потом ее опять поставить, то генерируется код, который и должен генерироваться! Но и это не всегда срабатывает. При этом ребилд не помогает.

Такая же ерунда, например, если есть такой код:

double d1, d2;
d1 = d2 = 0.5;


в результате и d1, и d2 равны .0.


Какие у кого есть соображения? Может ли это быть ошибкой компилятора?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.