C ++: Какова спецификация формата printf () для «float»?

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 , и все было бы нормально. Больше нет.

8
задан Ajay 26 August 2011 в 06:42
поделиться