`

java中的float和double的精度问题

阅读更多
1、背景知识
在java中没有细讲,只是讲了float占32位(bit),double占 64位。
对于计算机来说,用位数表示是合适的。但有人喜欢用字节(byte)表示。一个字节占8位。
1 byte = 8 bit.
所以float占4个字节,double占8个字节。
不过我还是喜欢用位数表示。这样更直接,也更容易理解计算机是怎么存储这些类型的。

对于精度和范围,还是参考一下c++吧。


2、存储知识
计算器存储浮点数的方法:(用科学计数法存储)
将要存的数先转换为小数(0.xxxxxx)x10的n次幂的形式进行存储。
例如:
3.1415 将被转换为:0.31415 x 10^1
100000 将被转换为:0.1 x 10^6

首先申明一点,先范围(有效数字位,包括整数位和小数位),再精度。


3、下面切入正题
=====================
在c++中单精度float类型与双精度double类型的问题

单精度float,在计算机中使用 32 bit (4个字节)来表示,具有7位十进制有效数字

分析:
在这 32 bit 中,
    - 1个bit表示符号位,
    - 8个bit表示指数位,
    - 剩下的23个bit是有效数字位。
      2的23次方是8388608,即7位十进制有效数字。


一个单精度的浮点数在内存当中占用了32个bit位,按照浮点数的表示标准,最高位表示符号,这32位一部分用来表示阶码,一部分用来表示小数部分。
按照这个表示方法转化成10进制之后,它能表示的最高精度是7位有效数字。

比如
float a=3.14159;a在内存中实际上表示为0.314159乘以10的1次方(0是符号位),而分配给a的存储单元就分为两部分,一部分存0.314159,一部分存指数1,而且也都是转化为2进制来存。



==================
float ,1位符号位, 8位指数位,23位尾数位
double,1位符号位,11位指数位,52位尾数位

float尾数位23位,2^23=8.3E6,7位,所以不同的编译器规定不同,有些是7位,有些8位
double尾数52位,2^52=4.5E15,15位,所以double的有效位数是15位








-------

后记:
数一下有效数字位数(整数位+小数位),7位以内的用float,15位以内的用double






但是还有一点小小的区别:

float f =  (float) 62345678.912345;  // => 6.234568E7  共 7 位
float f2 =  (float) 12345678.912345; // => 1.2345679E7 共 8 位







转自:
http://zhidao.baidu.com/question/415655003.html
http://zhidao.baidu.com/question/166445780.html


















--
分享到:
评论

相关推荐

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

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

    float和double

    float和double浮点数类型的精度和范围解析 浮点数类型float和double是编程语言中最常用的数值类型,但是它们...因此,在商业计算中,我们应该使用java.math.BigDecimal来避免精度问题,而不是使用float和double类型。

    Java 精确计算-double-float-String

    标题中的"Java 精确计算 - double-float-String"指向的是Java中处理浮点数(double和float)以及字符串表示的数值时可能遇到的精度问题,以及如何通过特定方法实现精确计算。描述中提到的链接指向了一个具体的博客...

    float、double类型介绍.zip

    标题中的“float、double类型介绍”指的是在编程语言中,如C++、Java或Python等,用于表示浮点数的数据类型。浮点数是计算机科学中用来表示小数的一种方式,因为它们不是精确的,而是近似的。浮点类型通常分为两种...

    Java与MySQL中小数保存问题解析.pptx.pptx

    在Java和MySQL中,处理小数时需要注意一系列与精度、数据类型选择以及运算准确性相关的问题。首先,让我们深入了解Java中小数的保存方式。 Java提供了两种基本的小数数据类型:float和double。float占用4个字节,...

    Java中double类型下出现精度计算错误情况下出力方法

    Java中的简单浮点数类型float和double不能够进行运算,因为大多数情况下是正常的,但是偶尔会出现如上所示的问题。这个问题其实不是JAVA的bug,因为计算机本身是二进制的,而浮点数实际上只是个近似值,所以从二进制...

    关于java的数值精度

    java程序中数值的精度问题,float、double容易产生精度数值问题,不适合精度计算,而bigdecimal正好解决这一问题

    float型和double型数据的存储方式1

    本文主要探讨了浮点类型数据,即float和double在内存中的表示方式,以及由此产生的精度问题。 首先,浮点类型数据有两种主要形式:单精度(float)和双精度(double)。float在内存中占用32位,而double占用64位。这...

    16位转浮点型float,MODBUS 32位转浮点型float 64位转双浮点型double

    在IT领域,数据类型转换是常见的操作,尤其是在通信协议如MODBUS中,为了高效传输和正确解析数据,需要将数值转换成不同的格式。本篇主要介绍16位、32位以及64位数据如何转换为浮点型(float)和双浮点型(double)...

    Java实现IEE754 Float类型数据

    本文将详细探讨如何使用Java语言来实现IEEE 754标准中的单精度浮点数(Float)的解析过程。 #### IEEE 754标准简介 IEEE 754标准定义了浮点数的二进制格式以及运算规则。对于单精度浮点数来说,它占用32位(4字节...

    java-16进制4字节转Float

    在Java中,浮点数有两种主要形式:单精度浮点数(float)和双精度浮点数(double),它们分别使用32位和64位来存储。 1. **字节序**:在进行16进制到浮点数的转换时,必须考虑到字节序,即字节在内存中的排列顺序。...

    Java源码获取浮点数类型的最大最小值

    在Java编程语言中,浮点数类型包括`float`和`double`,它们分别用于存储单精度和双精度浮点数。了解如何在源码级别获取这两种类型的最大和最小值对于编写高效且精确的代码至关重要。本文将深入探讨Java中获取浮点数...

    Java BigDecimal和double示例及相关问题解析

    在 Java 中,浮点数的表示形式有多种,包括 float 和 double 等,但是这些类型在进行计算时会出现精度问题,而 BigDecimal 则可以解决这种问题。本文将主要介绍 Java 中的 BigDecimal 和 double 的示例及相关问题...

    浅谈Java中的高精度整数和高精度小数

    Java 中的高精度整数和高精度小数 Java 中的高精度整数和高精度小数是指在 Java 编程语言中对大整数和小数的处理。高精度整数和高精度小数在实际应用中非常重要,例如在计算金钱的时候需要保留高精度小数,以避免...

    Java数据类型和MySql数据类型对应一览

    在 Java 中,数字类型对应的是 java.lang.Integer、java.lang.Long、java.lang.Float、java.lang.Double 等类型。在 MySql 中,数字类型对应的是 INTEGER、BIGINT、FLOAT、DOUBLE 等类型。其中,INTEGER 类型用于...

    Mysql、orcale 中的数据类型与java中的数据类型对应表.pdf

    Number(p,s) 类型对应 Java 中的浮点型,包括 float 和 double 等。 在 Oracle 中,Date 类型对应 Java 中的 java.util.Date 和 java.sql.Date 类型。其中 java.util.Date 类型的作用范围更广泛,因此通常应用于...

    用java从文件中读取浮点数

    在Java中,主要使用两种浮点数类型:`float`(单精度)和`double`(双精度)。`double`类型的精度更高,通常用于需要高精度计算的场景。 #### 1.2 文件读取机制 在Java中,文件读取通常涉及到输入流(`InputStream`...

    C#和java数据类型的等价类型

    * double:C#中的 double 类型对应Java中的 double 类型,都是双精度浮点数,取值范围为 -1.79769313486232e308 到 1.79769313486232e308。 四、字符类型 C#和Java都支持字符类型,包括 char 类型。这些类型都可以...

    java之java类型转换

    Java 中的简单类型包括 boolean、byte、char、short、int、long、float、double 和 void 八种类型,每种类型都有其对应的封装器类,如 Boolean、Byte、Character、Short、Integer、Long、Float、Double 和 Void。...

Global site tag (gtag.js) - Google Analytics