C ++: Какова спецификация формата printf ()
для float
? (Visual C ++)
Раньше я использовал % g
для float
и % lg
для double
.
Похоже, что спецификация изменилась и float
не определен, а double
равно % g
.
У меня есть биты в памяти, которые я распечатываю поэтому приведение типов не вариант.
Есть ли способ распечатать значения float
с помощью printf ()
?
Обновление:
Этот код был написан для модульного тестирования общих библиотек C ++, используемых во встроенной системе.
Вот что мне нужно было сделать, чтобы заставить работать поплавок
.
Код находится в шаблонной функции:
template <typename T,typename TTYP,typename Ttyp,int bits,bool IsSigned>
Error testMatrixT()
{ ...
Вот фрагмент кода:
if (typeid(Ttyp) == typeid(float)) {
float64 c = *(float32*)&Tp(row,col);
float64 a1 = *(float32*)&Arg1(row,col);
float64 a2 = *(float32*)&Arg2(row,col);
float64 e = *(float32*)&Exp(row,col);
m_b = (c == e);
_snprintf(m_acDiag, sizeof(m_acDiag)-1
, "add(Arg1,Arg2): arg1=%g, arg2=%g, Expected=%g, Actual=%g, Result: %s"
, a1, a2, e, c, BOOL_PF(m_b));
} else {
...
Довольно уродливо, не правда ли? Использование чисел с плавающей запятой в качестве аргументов дает неверный результат. Может быть, из-за использования _snprintf ()
?
Много лет назад я бы использовал % lg
, и все было бы нормально. Больше нет.