Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

printf - некорректное форматирование

17K
03 ноября 2006 года
Салтаев Д. П.
9 / / 05.10.2006
Хотел сравнить два дробных значения, вывел их в формате:
 
Код:
float __a = 97.1, __b = 92.1;
printf ("floats are:\n\t%1$20.15f = 0x%1$08lX\n\t%2$20.15f = 0x%2$08lX\n\t%3$20.15f = 0x%3$08lX\n", __a, __b, __a - __b);

результат заведомо ложный:
 
Код:
floats are:
           0.000000000000000 = 0x60000000
           0.000000000000000 = 0x40584666
          -0.117365859448910 = 0x60000000

однако для типа double все работает правильно
 
Код:
double __a = 97.1, __b = 92.1;
printf ("doubles are:\n\t%1$20.15f = 0x%1$016llX\n\t%2$20.15f = 0x%2$016llX\n\t%3$20.15f = 0x%3$016llX\n", __a, __b, __a - __b);

результат:
 
Код:
doubles are:
          97.099999999999994 = 0x4058466666666666
          92.099999999999994 = 0x4057066666666666
           5.000000000000000 = 0x4014000000000000


Мой компилятор:
gcc version 4.0.0 20050519 (Red Hat 4.0.0-8)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог