制作:方斌 [例3.3] main( float X, yi =111111.111;y=222222.222 printf("%/f, x+y) 程序输出: 333333.328152(实数运算中误差不可避免) [例3.4] maino double x, y; double x2,y2 =1111111111111.111111111 y=2222222222222.222222222 x2=11111111111.111;y2=2222222222222.222 printi("f%f",x+y,x2+y2);/*13位整数,9位小数*/ 程序输出: 3333333333333.3330103333333333333.333010(相同)
制 作:方 斌 [例3.3] main() { float x, y; x = 111111.111; y = 222222.222; printf("%f", x+y); } 程序输出: 333333.328152(实数运算中误差不可避免) [例3.4] main() { double x,y; double x2,y2; x = 1111111111111.111111111; y = 2222222222222.222222222; x2= 1111111111111.111; y2= 2222222222222.222; printf("%f %f", x+y, x2+y2); /* 13位整数,9位小数 */ } 程序输出: 3333333333333.333010 3333333333333.333010(相同)
制作:方斌 从[例3.3]和[例3.4]可以看出: (1)实数运算中误差不可避免。 (2) double(例3.7)比foat(例3.6)精度高。 (3) float实数(单精度)的有效位数是7位, double实数(双精度)的 有效位数是16位,超过有效位数的输出和输入均无意义。 [例3.5 maino float f= 123, 456 printf("%f日%10f%10.2口%.2口口%-10.2f",fff,f,f); 输出结果: 123.455994口口123.455994口口口口口123.46口123.46口口123.46
制 作:方 斌 从[例3.3]和[例3.4]可以看出: (1)实数运算中误差不可避免。 (2)double(例3.7)比float(例3.6)精度高。 (3)float实数(单精度)的有效位数是7位,double实数(双精度)的 有效位数是16位,超过有效位数的输出和输入均无意义。 [例3.5] main() { float f = 123.456; printf("%f□□%10f□□%10.2f□□%.2f□□%-10.2f",f,f,f,f,f); } 输出结果: 123.455994□□123.455994□□□□□□123.46□□123.46□□123.46