[sisyphus] Странности при переходе объединении двух целых в вещественное на x86_64
Roman Savochenko
rom_as на diyaorg.dp.ua
Ср Авг 5 21:08:43 MSD 2009
Приветствую Всех
Имеется некая целевая задачка собрать из двух 16-разрядных целых
вещественное (float), 32 разряда.
Казалось-бы тривиальная задача, которая решается кодом типа
int w1 = 62915, w2 = 16456;
ui32 vl = ((w2&0xffff)<<16) | w1&0xffff;
//sleep(1);
printf("TEST 00: %f\n",*(float*)&vl);
И как ожидалось на x86_32 он работает корректно при различной нагрузке.
А вот на x86_64 замечается ситуация когда вместо 3.14 получаем ноль.
Причём в тестовой программке с единственным потоком всё работает
нормально, а на высоконагруженном процессе с десятками потоков, из
которых около пяти работают с периодом 5мс. устойчиво получатся 0.
Если раскомментирую sleep, то получаю номальный результат 3.14.
Кто нибуть может такое поведение объяснить?
С уважением, Роман
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : rom_as.vcf
Тип : text/x-vcard
Размер : 218 байтов
Описание: отсутствует
Url : <http://lists.altlinux.org/pipermail/sisyphus/attachments/20090805/7a007893/attachment.vcf>
Подробная информация о списке рассылки Sisyphus