double -> int
От: Аноним  
Дата: 28.12.09 13:51
Оценка:
есть функция
void print_hex(uint32_t v);


есть такие переменные:

double a = 17.;
double b = 18.5;


если print_hex вызвать так
print_hex((a * b * 10.1));


то в результает получим фигню,
если посмотреть на дизассемблер, то видно,
что компилятор, берет выгружает результат умножения 8 байтный регистр сопроцессора,
в два 4 байтных регистра процессора и не заморачиваясь передает первый регистр в качестве
аргумента print_hex

если же print_hex вызвать так:

[ccode]
unsigned int v = (unsigned)(a * b * 10.);
print_hex(v);
[/code]

то выводиться все правильно, в дизасебмлере видно, что компилятор вставляет инструкцию для преобразования
double в int.

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