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.


Какие у кого есть соображения? Может ли это быть ошибкой компилятора?
Re: float и double - проблема с компиляцией
От: GarryIV  
Дата: 06.02.04 12:31
Оценка:
Здравствуйте, Pavluha! Вы писали:

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


P>
 P> double d1, d2;
 P> d1 = d2 = 0.5;
 P>


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


P> Какие у кого есть соображения? Может ли это быть ошибкой компилятора?


Или ты обкурился или чудной компилятор. Выбирай
Кстати какой именно?
Posted via RSDN NNTP Server 1.8 beta
WBR, Igor Evgrafov
Re[2]: float и double - проблема с компиляцией
От: Pavluha Россия  
Дата: 06.02.04 12:47
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Или ты обкурился или чудной компилятор. Выбирай

GIV>Кстати какой именно?

Хм... не употребляем-с.
А компилятор — расчудесный майкрософтовский из Visual Studio 7.0

Когда я первый раз такую свистопляску увидел, решил, что пора отдохнуть немного Не помогло.
Re: float и double - проблема с компиляцией
От: Sergey Россия  
Дата: 06.02.04 12:52
Оценка:
Hello, Pavluha!
You wrote on Fri, 06 Feb 2004 12:04:12 GMT:

P> По непонятной причине компилятор вместо констант float и double

P> генерирует их значение без дробной части, например:

P> Что самое смешное, если что-нибудь отредактировать не меняя смысла,

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

Слегка похожие глюки я наблюдал, когда процессор перегревался.

Best regards,
Sergey.
Posted via RSDN NNTP Server 1.8 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: float и double - проблема с компиляцией
От: Pavluha Россия  
Дата: 06.02.04 12:58
Оценка:
Здравствуйте, Sergey, Вы писали:


S>Слегка похожие глюки я наблюдал, когда процессор перегревался.


Да, забыл сказать, что это стабильно повторяется на 3-х машинах.
Re[3]: float и double - проблема с компиляцией
От: GarryIV  
Дата: 06.02.04 13:01
Оценка: +1
Здравствуйте, Pavluha! Вы писали:

P> Здравствуйте, GarryIV, Вы писали:


GIV>> Или ты обкурился или чудной компилятор. Выбирай

GIV>> Кстати какой именно?

P> Хм... не употребляем-с.

P> А компилятор — расчудесный майкрософтовский из Visual Studio 7.0

P> Когда я первый раз такую свистопляску увидел, решил, что пора отдохнуть

P> немного Не помогло.

Надаюсь никто не баловался макросами типа #define double int
Posted via RSDN NNTP Server 1.8 beta
WBR, Igor Evgrafov
Re[4]: float и double - проблема с компиляцией
От: Othello  
Дата: 06.02.04 14:33
Оценка:
Я с таким сталкивался в Borland C++ 3 под дос который. Но это у меня получалось если выставлять опцию линковать через asm. Всё что было сзязано с числами с плавающей точкой — не работало. И то кажется я ещё и включал программную эммуляцию FPU.
Может что с опциями компилятора ?
Posted via RSDN NNTP Server 1.7 "Bedlam"
Re[5]: float и double - проблема с компиляцией
От: Pavluha Россия  
Дата: 06.02.04 14:45
Оценка:
Здравствуйте, Othello, Вы писали:

O>Я с таким сталкивался в Borland C++ 3 под дос который. Но это у меня получалось если выставлять опцию линковать через asm. Всё что было сзязано с числами с плавающей точкой — не работало. И то кажется я ещё и включал программную эммуляцию FPU.

O>Может что с опциями компилятора ?

Опции компилятора и линковщика уже проверял много раз — они ничем не отличаются от настроек других dll нашего проекта. Что совсем непонятно — такая хрень творится только в одной dll.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.