主要测试了下浮点数据的非连续性、强制类型转换过程等。
#include<stdio.h>
int main()
{
float a, b, c;
a = 1.345f;
b = 1.123f;
printf("%f,%f\n",a,b);
c = a + b;
if (c == 2.468)
printf("相等\n");
else printf("不相等\nc=%.10f或%f\n",c,c);
int i = 32768;//1000 0000 0000 0000
printf("(char)32768=%d (short)32768=%d i=%d\n",(char)i,(short)i,i);
return 0;
}
- 带小数点的字面量是double型而非float,float需要用f或者F来表明身份。如果使用float a = 1.345;则会警告:warning C4305: “=”: 从“double”到“float”截断。
- 浮点数表示的数据不是连续的,导致有些数据只能够用相近的能表示的数据表示,而不是该数据本身。
- f1==f2可能失败,应该使用fabs(f1-f2)<le-8(对于float来说保留了7位精度,将值控制在所在类型的精度范围之下就可以了)。
- 对于printf,任何小于int的类型会被转化成int,float会被转化成double;但是scanf不会,要输入short,需要%hd,要输入double,需要%lf。
- 强制类型转换只是从原来变量计算出了一个新的类型的值,它并不改变原来变量,无论是值还是类型都不改变。
- 没有特殊需要,整数类型选择int。原因在于:int的大小和CPU中的寄存器位数大小相同,存取数据都是int大小存取。其次,使用short类型等需要考虑数据对齐问题。
- 没有特殊需要,浮点类型选择double。现代CPU能够直接对double做硬件运算,性能不会比float差,在64位机器上,数据存储的速度也不比float慢。