`
july05122868
  • 浏览: 17436 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

float与double的范围和精度

 
阅读更多
1. 范围

float和double的范围是由指数的位数来决定的。(因为表示的时候都是1.x * 2^Y的形式,所以忽略了1.x的效果,直接取指数表示浮点数的范围)

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的精度是由尾数的位数来决定的(精度,也就是那个程序中的EPSINON,是由尾数来决定的)。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

所以,我们可以知道浮点数跟“0”比较大小的时候,EPSINON的由来了。
分享到:
评论

相关推荐

    float double精度的详细解释

    ### float与double精度详解 #### 一、浮点数的基础概念 在计算机科学中,`float` 和 `double` 是两种常用的浮点数类型,它们主要用于处理实数运算。这两种类型的区别主要体现在精度和范围上。 #### 二、浮点数的...

    float和double

    float和double浮点数类型的精度和范围解析 浮点数类型float和double是编程语言中最常用的数值类型,但是它们的精度和范围却是程序员需要注意的重要问题。本文将详细解释float和double的范围和精度,及其在商业计算...

    解决java数值范围以及float与double精度丢失的问题

    解决java数值范围以及float与double精度丢失的问题 Java中的数值范围和浮点数精度问题是许多开发者经常遇到的问题。下面我们将详细探讨Java中的数值范围、float和double类型的精度问题,并且提供解决方案。 一、...

    基于C++浮点数(float、double)类型数据比较与转换的详解

    这是因为浮点数在内存中的二进制表示导致的,且`float`和`double`各有不同的精度限制。 2. **浮点数转换为字符串**: 使用`sprintf()`函数将浮点数转换为字符串时,需要注意精度控制。对于`float`,它的小数点前后...

    float、double类型介绍.zip

    这些文件与float和double的理论知识关联不大,但在实际编程环境中,理解这些文件的作用对于项目的构建和调试至关重要。 总结来说,float和double是编程中处理浮点数的关键数据类型,理解它们的表示方法、精度、误差...

    HEX-Float转换工具 16进制转成float 或double类型数据的一个小工具

    而浮点数则是一种科学计数法的二进制表示,用于存储可能的大范围和高精度数值。浮点数分为两部分:指数部分和尾数部分,它们都是二进制形式的。 在计算机中,根据IEEE 754标准,float和double类型的浮点数有不同的...

    十六进制(HEX)和浮点类型(float、double)转换工具

    这种表示方式允许它们在有限的存储空间内表示极大的或极小的数值范围,但同时会引入精度损失。 转换十六进制到浮点类型和反之的过程较为复杂,涉及到对二进制表示的理解。对于十六进制转浮点,首先要将十六进制转换...

    C#中float的取值范围和精度分析

    本文实例分析了C#中float的取值范围和精度。分享给大家供大家参考。具体分析如下: float类型的表现形式: 默认情况下,赋值运算符右侧的实数被视为 double。 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例...

    float_double存储问题

    double 的存储方式与 float 的存储方式大同小异,不同的是指数部分和尾数部分的位数。 double 的指数部分为 11 位,尾数部分为 52 位。 通过上面的知识点,我们可以解决一些疑惑的问题。例如, float f = 2.2f; ...

    float_double_explicit.rar_float

    例如,将double强制转换为float可能会丢失部分信息,因为float的表示范围和精度都小于double。因此,使用“explicit”关键字进行类型转换可以防止隐式转换,从而避免潜在的错误。 gtest_pred_impl.c可能是Google ...

    C# 按照IEEE 754标准对Float和Double类型进行转换

    本话题主要聚焦于如何根据IEEE 754标准来处理和转换浮点数类型,包括`float`和`double`。IEEE 754是国际上广泛采用的一个标准,用于定义浮点数的存储格式,它规定了二进制浮点数的表示方法,包括正负号、指数和尾数...

    详解iOS之关于double/float数据计算精度问题

    本篇文章将详细介绍 iOS 中 double/float 数据计算精度问题的根源、解决方案和高精度计算方法。 一、double/float 数据计算精度问题的根源 在 iOS 开发中,我们经常使用 double 和 float 数据类型来表示小数。但是...

    浮点数的存储结构(double和float)

    3. **精度和范围**:由于`float`和`double`的位数不同,它们的精度和表示的数值范围也有所差异。`double`通常具有更高的精度和更大的数值范围,因此在需要更高精度的计算中更常被使用。 了解这些基础知识后,可以...

    C语言中floatdouble的区别.pdf

    在C语言中,float和double是两个基本的浮点类型,它们在存储方式、精度、数值范围等方面存在着明显的差异。 首先,float类型是单精度浮点数,它占用4个字节的内存空间,有效数字为6-7位,数值范围在-3.4*10(-38)到...

    十进制和十六进制转换成float、double数据

    本文将详细讲解如何将十进制和十六进制数值转换为浮点数(float)和双精度浮点数(double)。 首先,让我们从十进制开始。十进制是我们日常生活中最常用的计数系统,其基数为10。在MATLAB中,我们可以通过直接输入...

    Keil MDK-ARM各种数据类型占用的字节数 char short int float double

    6. **double**: 双精度浮点数`double`占用8个字节,提供更高的精度,可以表示大约15位有效数字的数值。 在进行移植和优化代码时,了解这些基本数据类型的大小对于内存管理、计算效率以及兼容性非常重要。例如,在...

Global site tag (gtag.js) - Google Analytics