当前位置:首页 > 技术 >

double和float的优势(float和double用起来有什么区别)

来源:原点资讯(www.yd166.com)时间:2023-04-16 04:15:10作者:YD166手机阅读>>

float 单精度浮点数在机内占 4 个字节,用 32 位二进制描述。

double 双精度浮点数在机内占 8 个字节,用 64 位二进制描述。

double和float的优势,float和double用起来有什么区别(1)

浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。

数符占 1 位二进制,表示数的正负。

指数符占 1 位二进制,表示指数的正负。

尾数表示浮点数有效数字,0.xxxxxxx, 但不存开头的 0 和点。

指数存指数的有效数字。

指数占多少位,尾数占多少位,由计算机系统决定。

可能是数符加尾数占 24 位,指数符加指数占 8 位 -- float

数符加尾数占 48 位,指数符加指数占 16 位 -- double

知道了这四部分的占位,按二进制估计大小范围,再换算为十进制,就是你想知道的数值范围。

对编程人员来说,double 和 float 的区别是 double 精度高,有效数字 16 位,float 精度 7 位。但 double 消耗内存是 float 的两倍,double 的运算速度比 float 慢得多,C 语言中数学函数名称 double 和 float 不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。

类型比特数有效数字数值范围float326-7-3.4*10(-38)~3.4*10(38)double6415-16-1.7*10(-308)~1.7*10(308)long double12818-19-1.2*10(-4932)~1.2*10(4932)

简单来说,Float 为单精度,内存中占 4 个字节,有效数位是 7 位(因为有正负,所以不是8位),在我的电脑且 VC 6.0 平台中默认显示是6位有效数字;double为 双精度,占 8 个字节,有效数位是 16 位,但在我的电脑且 VC 6.0 平台中默认显示同样是 6 位有效数字

例子:在 C 和 C 中,如下赋值语句:

float a=0.1;

编译器报错:warning C4305: 'initializing' : truncation from 'const double ' to 'float '

原因: 在 C/C 中(也不知道是不是就在 VC 中这样),上述语句等号右边 0.1,我们以为它是个 float,但是编译器却把它认为是个 double(因为小数默认是 double),所以要报这个 warning,一般改成 0.1f 就没事了。

本人通常的做法,经常使用 double,而不喜欢使用 float。

C 语言和 C# 语言中,对于浮点类型的数据采用单精度类型 float 和双精度类型 double 来存储,float 数据占用 32bit, double 数据占用 64bit,我们在声明一个变量 float f= 2.25f 的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是 float 还是 double 在存储方式上都是遵从 IEEE 的规范 的,float 遵从的是 IEEE R32.24 ,而 double 遵从的是 R64.53。

无论是单精度还是双精度在存储中都分为三个部分:

  • 符号位(Sign):0 代表正,1 代表为负。
  • 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储。
  • 尾数部分(Mantissa):尾数部分。

来源地址:https://my.oschina.net/zd370982/blog/724265

← C/C 获取键盘事件

Java 接口和多态 →


1 篇笔记

  1. TRDSF
  2. 429***435367@qq.com
  3. C 中 float 与 double 类型的精度区别
  4. double 精度高,有效数字 15-16 位,float 精度低,有效数字 6-7位,但是 double 消耗的内存是 float 的两倍,运算速度比 float 慢得多,建议能用 float 保证精度的就用 float,少用 double。

#include <iostream> #include <iomanip> using namespace std; int main() { float a=12.257902012398877; double b=12.257902012398877; const float PI=3.1415926; // 常量定义 cout<<setprecision(15)<<a<<endl; // 只有6-7位有效数字,后面的就不精确 cout<<setprecision(15)<<b<<endl; // 有15-16位有效数字,所以完全正确 cout<<setprecision(15)<<PI<<endl; return 0; }

栏目热文

double和float的用法(什么时候用float什么时候用double)

double和float的用法(什么时候用float什么时候用double)

我记得世纪之初的时候,某本古老的书上有这么一句话,大概是这个意思,无论是float还是double,在CPU内部都是转换...

2023-04-16 04:13:52查看全文 >>

相机的白平衡新老手都这样设置(相机白平衡正确使用方法)

相机的白平衡新老手都这样设置(相机白平衡正确使用方法)

很多初学摄影的人刚接触相机时,一脸茫然不知道相机菜单栏里的各种参数该怎么设置,也不知道怎样设置参数才能拍出自己想要的效果...

2023-04-16 04:31:00查看全文 >>

相机白平衡在哪里调节(相机白平衡的调节平时需要吗)

相机白平衡在哪里调节(相机白平衡的调节平时需要吗)

使用相机拍摄,除了设置曝光三要素之外,白平衡也是非常重要的一个参数。今天我们就围绕白平衡来展开,希望大家能够学会白平衡的...

2023-04-16 04:08:07查看全文 >>

如何精准设置相机白平衡(相机调白平衡最佳方法)

如何精准设置相机白平衡(相机调白平衡最佳方法)

相机的白平衡,是对画面色彩有直接影响的参数。往复杂方向说,涉及到色温变化、冷暖调的画面效果、正确的白平衡和效果的营造;通...

2023-04-16 04:04:08查看全文 >>

相机白平衡怎么调整最佳(相机怎样调整白平衡最准确)

相机白平衡怎么调整最佳(相机怎样调整白平衡最准确)

白平衡,是为了还原照片中的环境色彩,不会出现偏色,维持“白色”的平衡。白平衡的实质是调整相机中的色温参数,物理学上的色温...

2023-04-16 04:35:12查看全文 >>

double 和float哪个范围大(float和double哪个类型好)

double 和float哪个范围大(float和double哪个类型好)

要想理解 float 和 double 的取值范围和计算精度,必须先了解小数是如何在计算机中存储的:举个例子:78.37...

2023-04-16 04:26:18查看全文 >>

c语言float和double的区别(c语言float和double保留小数点后几位)

c语言float和double的区别(c语言float和double保留小数点后几位)

首先变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,另一种是强制转换。 自动转换即当不同类型的数据进行混...

2023-04-16 04:15:42查看全文 >>

float和double怎么使用(float和double的数值范围)

float和double怎么使用(float和double的数值范围)

为了表示浮点数,我们使用float,double和long double,有什么不同 ?double的精度是float的...

2023-04-16 04:14:06查看全文 >>

double和float有什么区别(double和float哪个优先)

double和float有什么区别(double和float哪个优先)

float是单精度类型,精度是8位有效数字,取值范围是10的-38次方到10的38次方,float占用4个字节的存储空间...

2023-04-16 04:30:49查看全文 >>

铅皮自制朝天钩(自制朝天钩制作方法)

铅皮自制朝天钩(自制朝天钩制作方法)

河里水太浅,立漂不好用,原来买过一个七星漂,没有装备铅皮和鱼钩,一直没有用,去买个朝天钩,也不好意思,网上购买,得好几天...

2023-04-16 04:25:02查看全文 >>

文档排行