我正在尝试打印浮点数。虽然变参函数不支持浮点数,所以它们被提升为双精度。我可以通过将其转换为双精度来消除警告。但是,在一些PowerPC架构上打印结果时,如果使用%f,则会给出错误的值。为什么?
测试代码:
#include <stdio.h>
#define _echo_size(X) \
printf ("Sizeof "#X" %u\n", sizeof(X))
int main (void)
{
float x;
long usec = 7L;
_echo_size(float);
_echo_size(double);
_echo_size(short);
_echo_size(int);
_echo_size(long);
_echo_size(long long);
x = ((float) usec) / 2;
printf("Expected: 3.5 Got: %1.1f\n", (double) x);
printf("Expected: 3.5 Got: %1d.%.1d\n", (int)x,
(int)((x-(int)x)*10));
return 0;
}
X86 系统结果:
Sizeof float 4
Sizeof double 8
Sizeof short 2
Sizeof int 4
Sizeof long 8
Sizeof long long 8
Expected: 3.5 Got: 3.5
Expected: 3.5 Got: 3.5
PPC系统结果:
Sizeof float 4
Sizeof double 8
Sizeof short 2
Sizeof int 4
Sizeof long 4
Sizeof long long 8
Expected: 3.5 Got: 0.0 <--- Why this ?
Expected: 3.5 Got: 3.5
这是工具链中的一个错误吗?否则,有什么优雅的方法可以打印浮点数?
-mfloat-abi=softfp
编译了吗? - Benny