`
bingobird
  • 浏览: 44921 次
社区版块
存档分类
最新评论

浮点型精度

阅读更多

今天一同事发现,往数据库插入一字段值为400000.18,库中变成400000.19,字段为float类型。(以下讨论皆针对单精度浮点)

 

找了下资料,浮点型运算基本按照IEEE-754格式标准,FLOAT是由4个字节(32位)组成:

SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

S: 第一位:表示浮点数正负,1为负数,0为正数
E: 指数加上127后的值的二进制数
M: 24-bit的底数(由于符号位已经由S标识了,只存储23-bit)

 

按照上图,浮点型最多只能精确2^23内的整数,但由于IEEE754标准对底数格式作了规范:即二进制的1.xxxxx,因此底数小数点左面部分总是1,在这里,为了提高精度,把1省略了,因此实际上最多能精确到2^24-1(即16777215)内的整数。由此可见,整数最大可保证精度为7位。

 

至于带小数的处理,由于小数位与整数位是分开计算,而且由于小数位独特的转二进制方法,可能存在无限循环,决定了浮点的小数位无法做到100%精确,使带小数的浮点精度更低。直到现在,我还不解为何转二进制采用乘2取整如此独特的方法,正是因为这种方法导致小数位无法像整数位一般精确。

 

结论:单精度浮点最大可保证精度是7位(xxxxx.xx),JAVA中的浮点型,如果需要7位数值以上的精确度,就换成BigDecimal(推荐)或double型(52bit底数,15位精确度),在MYSQL中则推荐采用DECIMAL(x,y)。

 

标准参考:http://en.wikipedia.org/wiki/IEEE_754-2008

分享到:
评论

相关推荐

    国际绝对音名十二等律标准音高频率对照表(浮点型精度、十二等律体系、A4=440.01000Hz)

    国际绝对音名十二等律标准音高频率对照表(浮点型精度、十二等律体系、A4=440.01000Hz) https://blog.csdn.net/weixin_53403301/article/details/121737931

    S7-200SMART 双精度浮点型数据转换为单精度浮点型的方法.pdf

    在处理数据时,经常会遇到需要将双精度浮点型数据(Real)转换为单精度浮点型数据(Float)的情况。双精度和单精度浮点数在计算机中以二进制形式表示,双精度占用64位(8字节),而单精度占用32位(4字节)。在S7-...

    16进制单精度(32位)浮点型转换器源码

    本主题聚焦于一个特定的工具或源码,即“16进制单精度(32位)浮点型转换器”,它能够将32位的浮点数在16进制表示与十进制表示之间进行转换,并考虑到了不同的字节序——大端和小端。 首先,我们要理解16进制和...

    IEEE 754 双精度浮点型格式转换工具

    在双精度浮点型和十六进制之间的转换中,需要将二进制数按照IEEE 754的格式拆分,然后将每个8位的字节转换为对应的十六进制字符。相反,从十六进制转换回来时,需要将每个字符转换为8位二进制,再根据IEEE 754的标准...

    labview_32位单精度浮点数转定点小数

    labview_32位单精度浮点数转定点小数,亲测可用(Own use labview to build 32-bit single precision floating point decimal turn, pro-test available)

    64位16进制字符串to双精度浮点数_labview_64位浮点_双精度

    LabVIEW的“二进制到浮点”函数可以自动完成这个复杂的解码过程。 5. **生成双精度浮点数**:最后,LabVIEW会根据解析出的信息生成一个双精度浮点数。这个数值可以直接在程序中使用,也可以通过数据显示出来供用户...

    64位16进制字符串to双精度浮点数_labview_64位浮点_双精度_源码.zip

    LabVIEW中的数据类型包含各种数值类型,如整型、单精度浮点、双精度浮点等。在进行16进制字符串到双精度浮点数的转换时,LabVIEW提供了相应的函数和VI(Virtual Instruments)来实现这一过程。这些函数通常会先将16...

    matlab开发-等精度浮点检查等精度

    该函数接受两个浮点数作为输入参数,并返回一个逻辑值(true或false),指示这两个数在浮点精度范围内是否相等。这个函数考虑了浮点数的精度限制,使用了一种容差(tolerance)策略来进行比较,而不是简单的直接比较...

    cJSON库可以更改数字精度

    4. cJSON_Number:表示数值类型的JSON值,包括整型和浮点型。 5. cJSON_True / cJSON_False:表示布尔类型的JSON值。 6. cJSON_NULL:表示null类型的JSON值。 cJSON库提供了解析JSON字符串为C语言数据结构(cJSON_...

    浮点型,二进制互相转换工具

    浮点型和二进制转换是计算机科学中的基础概念,特别是在处理数值计算和数据存储时。浮点型是一种表示实数的方式,它基于科学计数法的概念,而在计算机内部,所有的数据都以二进制形式存在,包括浮点数。在编程中,...

    单精度浮点转换器

    单精度浮点转换是计算机科学中的一个重要概念,特别是在数值计算、数据存储和处理领域。它是一种数据类型,用于表示带有小数部分的数值,通常占用32位的二进制空间。这种格式由国际标准组织IEEE 754定义,被广泛应用...

    IEEE754 浮点型数据(单精度)转字符型数组实例

    在本实例中,我们将讨论如何将遵循 IEEE 754 标准的单精度浮点型数据转换为字符型数组,以便于存储或传输。 单精度浮点型数据在 IEEE 754 中占用32位,这32位被分为四个部分:符号位(1位)、指数部分(8位)和尾数...

    精度浮点转换器源码 (By Greatboy)

    标题 "精度浮点转换器源码 (By Greatboy)" 提供了一个关键信息,即这是一个用于转换和显示IEEE浮点数的程序。浮点数在计算机科学中是表示实数的一种方式,尤其在数学计算和科学计算中至关重要。IEEE是电气和电子...

    C语言精度设置(浮点型)案例代码

    1.C语言精度设置(浮点型)案例代码 2.适合C语言初学者学习 3.建议与C语言精度设置(整数型)案例代码对比学习 4.永久免费下载本资源

    ieee754数据转单精度浮点型

    单精度浮点型(float)是IEEE 754标准中的一种数据类型,主要用于存储和处理浮点数,通常占用32位(4字节)。在C语言中,理解和操作IEEE 754单精度浮点型数据是编程的重要部分,尤其是在数值计算、科学计算和游戏...

    java double:双精度浮点型.txt

    java double:双精度浮点型

    java float:单精度浮点型.txt

    java float:单精度浮点型

    C语言单精度浮点转换工具

    "C语言单精度浮点转换工具"是一款专为C语言开发者设计的小型实用程序,它能帮助将16进制32位数据转化为浮点数。这个功能在特定情况下非常有用,比如当开发者需要处理存储在内存或文件中的二进制浮点数据时。 首先,...

    浮点数转化器,单精度浮点计算软件,FLOAT转HEX

    浮点数转化器,单精度浮点计算软件,FLOAT转HEX

    arcgis数据类型

    3. **浮点型(Float)**:浮点型是单精度浮点数,大约介于-3.4E38和1.2E38之间,占用4个字节。浮点型数据用于存储带有小数部分的数值,适合连续性数据的测量和计算。 4. **双精度(Double)**:双精度浮点数提供了...

Global site tag (gtag.js) - Google Analytics