今天遇到一题zoj_1128,数据范围是(0<=x1<x2<=100000;0<=y1<y2<=100000),所有的数不一定是整数,并且最后输出的结果保留2位小数。用float死活wa,最后double过了,痛过之后来总结一下float和double的范围精度。
下面引用:http://www.cnblogs.com/BradMiller/archive/2010/11/25/1887945.html
1. 范围
float和double的范围是由指数的位数来决定的。
float的指数位有8位,而double的指数位有11位,分布如下:
float:
1bit(符号位) 8bits(指数位) 23bits(尾数位)
double:
1bit(符号位) 11bits(指数位) 52bits(尾数位)
于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。
其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。
2. 精度
float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。
从上面的分析可以看出,题目中的数据最大可达7位有效数字,用float太不稳了,应该果断用double
分享到:
相关推荐
数据精度问题 float与double的范围和精度
float double精度的详细解释,小数点位数等等
浮点数在内存中的存储机制和整型数...1、将字符串转换为float、double过程存在精度损失,只是float、double各自损失的精度不相同而已std::string str=”8.2″;float cc=atof(str.c_str()); //cc的值为8.1999998std:
float和double为什么不可以使用精度计算的解析。
本文实例分析了C#中float的取值范围和精度。分享给大家供大家参考。具体分析如下: float类型的表现形式: 默认情况下,赋值运算符右侧的实数被视为 double。 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例...
C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用64bit
下面小编就为大家带来一篇解决java数值范围以及float与double精度丢失的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
解析参见:https://handsome-man.blog.csdn.net/article/details/107333529
C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,...
Java中的简单浮点数类型float和double不能够进行运算,因为大多数情况下是正常的,但是偶尔会出现如上所示的问题。这个问题其实不是JAVA的bug,因为计算机本身是二进制的,而浮点数实际上只是个近似值,所以从二进制...
iOS 解决字符串floatValue,doubleValue等后计算不精确问题,一句话解决精确计算,精确比较
[C語言][教學]_基本語法#09._基本型態二_-_浮點數Float與雙精度浮點數Double
本篇文章主要介绍了iOS之关于double/float数据计算精度问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
[iOS][Swift][中文]_基礎語法#06._小數、整數Int與雙精度浮點數Double,_Float
③浮点类型:float(单精度型)、double(双精度型) 例:3.1456 , 0.9e12 ④空值类型:void(空值型) ⑤布尔类型:bool 例:true , false。 2.类型修饰符共四种 例:short a; ; 则-32767≤a ≤32767 例:unsigned ...
Trans(double)返回2进制 TransToHex(double)返回16进制 GetCrcstring(string data, ref string crc)返回冗余校验
S7-200SMART 64位浮点数转换为32位浮点数指令库文件Double_to_Float
float存储格式及FPU ...双精度 double 1 52 11 扩展精度 1 64 15 存储顺序为: 符号位 指数位 底数位, 由于底数的个位必为1, 因此个位和小数点就不存储. 指数位的高位也是符号位, 不过为1表示正, 0表示负.