C ++: Что такое спецификация формата printf()
для float
?(Visual C ++)
Раньше я использовал %g
для float
и %lg
для double
.
Похоже, что спецификация изменилась, и float
не определено, а double
равно %g
.
У меня есть биты в памяти, которые я печатаю, поэтому приведение не является вариантом.
Можно ли распечатать float
значения, используя printf()
?
Обновление:
Этот код был написан для единицытестирование общих библиотек C ++, используемых во встроенной системе.Вот что я должен был сделать, чтобы float
заработал.Код в шаблонной функции:
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
, и все было бы в порядке.Больше нет.