C++:什么是
过去,我使用
现在看来规范已经改变,
由于需要打印出内存中的位,因此转换类型不是一个选项。
有没有办法使用
更新:
这段代码是为了单元测试嵌入式系统上使用的通用C++库编写的。 以下是我为使
相当丑陋,对吧?使用浮点数作为参数会产生不良输出。也许是因为使用了
printf()
的float
格式规范?(Visual C++)过去,我使用
%g
来表示float
,使用%lg
来表示double
。现在看来规范已经改变,
float
未定义,而double
则是%g
。由于需要打印出内存中的位,因此转换类型不是一个选项。
有没有办法使用
printf()
打印出float
值?更新:
这段代码是为了单元测试嵌入式系统上使用的通用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
时还好,但现在不行了。
%g
适用于浮点数,因为它被提升为双精度。 - Keith Thompson