есть функция
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.
Прав ли компилятор в первом случае?