C++: Jaki jest format formatu printf()
dla float
? (Visual C++)C++: Jaki jest format specyfikacji printf() dla "float"?
Kiedyś używałem %g
dla float
i %lg
dla double
.
Wygląda na to, że specyfikacja została zmieniona, a float
jest niezdefiniowana, a double
jest %g
.
Mam w pamięci bity, które wypisuję, więc odlewanie nie wchodzi w grę.
Czy istnieje sposób, aby wydrukować wartości float
przy użyciu printf()
?
Aktualizacja:
Kod ten został napisany dla testów jednostkowych rodzajowe C++ bibliotekami używane od wbudowanego systemu. Oto, co musiałem zrobić, aby uruchomić float
. Kod jest w funkcję szablonu:
template <typename T,typename TTYP,typename Ttyp,int bits,bool IsSigned>
Error testMatrixT()
{ ...
Oto wycinek kodu:
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 {
...
Dość brzydka prawda? Używanie zmiennoprzecinkowych jako argumentów daje złe wyniki. Może z powodu używania _snprintf()
? Lat temu użyłbym %lg
i byłoby OK. Nigdy więcej.
To jest trzecie lub czwarte pytanie, które widziałem, w ciągu wielu dni, na temat drukowania float! – Praetorian
Nie wspomniałeś o tym, co się stanie, jeśli użyjesz% g. Ale% g nie jest domyślną wartością float. – steve
@steve: '% g' działa w trybie float, ponieważ jest promowane do podwojenia. –