单精浮点和双精浮点有什么区别?

来源:百度知道 编辑:UC知道 时间:2024/09/22 13:36:53
为什么float换成double以后,答案就不对了呢?变成一组随机数字了!

搂主,你这个问题可问得大啦,能说几大片呢?你问的是底层表示上的差别呢还是比如说打印格式上的差别呢?

我大概知道你遇到的问题了。多半是声明了一个double型变量,然后用scanf从键盘读取输入值,然后用printf打印出来是不是?
double x;
scanf( "%lf", &x );
printf( "%.12f\n", x );

你要注意,scanf是对float和double是区别对待的,是用不同的占位符float用%f,double用%lf,所以如果你把x声明为float就要用%f,如果声明成double就要用%lf。但是printf不区分float和double,它一概当double处理,所以不要在%f里面加上l,而且C默认的输出精度是小数点后6位,你一般是看不到6位以后的值的,如果你想多显示一些精度值,你可以向我上面那样用%.nf, n为你想要的精度值。

应该就是浮点表示时指数部分和尾数部分占用的字节数不同吧!双精比单精长

以下是VB关于单精度浮点型和双精度浮点型的定义:
Single 数据类型
Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。

Double 数据类型
Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,它的范围在负数的时候是从 -1.79769313486232E308 到 -4.94065645841247E-324,而正数的时候是从 4.94065645841247E-324 到 1.79769313486232E308。

C语言:
FLOAT 10E-37 -10E38
Double 10E-307 - 10E308
LONG Double 10E-4931 - 10E4932