精华内容
下载资源
问答
  • C、C++中使用到单精度浮点数(float)类型双精度浮点数(double)类型是在IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985)中定义。下面分别从存储格式、内存分布、编码规则、取值范围、有效数字位数和...

    单精度和双精度浮点数数据类型

     

    CC++中使用到的单精度浮点数float)类型和双精度浮点数double)类型是在IEEE二进制浮点数算术标准ANSI/IEEE Std 754-1985)中定义的。下面分别从存储格式、内存分布、编码规则、取值范围、有效数字位数和测试示例程序六个部分来详细说明。

    存储格式

    浮点数在计算机中存储时,按照二进制科学计数法拆分为三个部分:符号位、指数部分和尾数部分。如下图所示:

    单精度和双精度浮点数数据类型详解 

    存储时,按照最高位存储符号位,次高位存储指数部分,低位存储尾数部分的次序存储。存储时的排列示意图如下:

     单精度和双精度浮点数数据类型详解

     

    内存分布

    float类型和double类型的各部分在内存中的存储空间占用如下表:

     单精度和双精度浮点数数据类型详解

    float类型的内存分布如下图所示:

     单精度和双精度浮点数数据类型详解

    double类型的内存分布如下图所示:

     单精度和双精度浮点数数据类型详解

     

    编码规则

    在实际存储时要对使用二进制科学计数法表示的浮点数值的符号位、指数部分和尾数部分进行编码处理。一般需要分为规约形式的浮点数、非规约形式的浮点数和特殊值三种类型进行编码。其编码前后处理如下图所示:

    单精度和双精度浮点数数据类型详解

    注:非规约浮点数主要用于扩大0值附近的浮点数表示范围,非规约浮点数的绝对值均小于规约浮点数的绝对值,即前者在实数轴上更靠近0,这样可以提高0附近的计算精度;一般CC++floatdouble的取值范围都是按照规约浮点数定义的,MSDN文档和相关教材也是这么说的,但部分编译器按照ANSI/IEEE Std 754-1985标准实现了非规约浮点数,本文末尾留有程序示例说明。

    符号位:0表示正数,1表示负数;

    指数部分: float的偏移量为2^8 - 1double的偏移量为2^11 - 1

    尾数部分:实际尾数部分中的小数点后的数值,规约浮点数使用标准的二进制科学计数法表示,其尾数范围在 [12),非规约浮点数的尾数部分范围在(01)。

    下面以规约浮点数8.5为例,来说明浮点数的编码过程:

    单精度和双精度浮点数数据类型详解

     

    取值范围

    单精度浮点数的各种极限值和取值范围如下图所示:单精度和双精度浮点数数据类型详解

    双精度浮点数的各种极限值和取值范围如下图所示: 单精度和双精度浮点数数据类型详解

     

    有效数字位数

    因为有效数字位数只与位数有关,所以只要计算出十进制表示的尾数中有效数字位数就能知道该浮点数的有效数字位数。

     单精度和双精度浮点数数据类型详解

    注:在接近0、正无穷、负无穷等极限值时,有效数字不能保证为上述精度。

    测试示例程序

    浮点数据表示测试可以通过IEEE-754 Analysis网页在线测试,也可以通过自己编写的C\C++程序来测试。

    一下是在Visual Studio 2010下编写的C++测试代码:

     单精度和双精度浮点数数据类型详解

    输出结果如下:

     单精度和双精度浮点数数据类型详解

    从上述结果可以看出编译器已经实现了ANSI/IEEE Std 754-1985标准中定义的float型和double型浮点数,而头文件定义中并未更新或修改,MSDN文档亦是如此。如下图:

     单精度和双精度浮点数数据类型详解

    展开全文
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...

    前言

    作为一名java学习者,怎能不懂这些java基础中的基础呢?本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。

    浮点型

    首先明确java中浮点型数据类型主要有:单精度float、双精度double

    至于浮点型就是跟int ,string类型差不多。都是数据类型。

    浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而恰恰小数点可以在相应的二进制的不同位置浮动,可能是这样就被定义成浮点型了。不得不佩服这文化程度,定义个数据名称都这么有深度

    浮点型常量 Java的实常数有两种表示形式:

    1、 十进制数形式:由数字和小数点组成,且必须有小数点,如0.123 , 123.0

    2、科学计数法形式:如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数(当然也包括负整数)。

    科学计数法中的E

    了解浮点型常量 Java的实常数有两种表示形式之后,很有必要给各位科普科普下科学计数法中E的面貌了~

    E是指数的意思,E代表的英文是exponent,E表示10的多少次方的意思。

    比如7.823E5 = 782300 这里E5表示10的5次方,再比如54.3E-2 = 0.543这里E-2表示10的-2次方

    再补充一点(针对负次方理解)

    一个数的负几次方就是这个数的几次方的倒数。

    比如: 2的负1次方=2的1次方分之一=1/2

    比如: 3的负2次方=3的2次方分之一=1/9

    单精度浮点数(float)

    单精度浮点数在机内占4个字节、有效数字8位、表示范围:-3.40E+38 ~ +3.40E+38

    在Java语言当中,所有的浮点型字面值 【V8提示】浮点型简单来说就是表示带有小数的数据 默认当做double类型来处理,要想该字面值当做float类型来处理,需要在字面值后面添加F/f,或者强制装换为float。具体如下代码:

    public static void main(String[] args) {

    //3.10是浮点型,浮点型字面值默认当做double类型来处理,直接编译通过;

    double d=3.10;

    //3.10是浮点型,则必须加 F或者f,若没加,直接编译不通过,会报错“损失精度”

    float f=3.10; //编译出错会报错“损失精度”

    // 解决办法:

    // 第一种方式:强制类型转换

    float f1=(float)5.1;

    // 第二种方式:没有类型转换;

    folat f2=5.1f;

    }

    再来看看下面的测试,结果肯定十之八九会在意料之外,哈哈~

    public static void main(String[] args) {

    float a = 12345678.90123456789f;

    double b=0.12345678901234567890;

    float c=0.12345678901234567890f;

    System.out.println(a);

    System.out.println(b);

    System.out.println(c);

    打印结果

    a = 1.2345679E7

    b = 0.12345678901234568

    c = 0.12345679

    }

    双精度浮点数(double)

    双精度浮点数在机内占8个字节、有效数字16位、表示范围:-1.79E+308 ~ +1.79E+308

    double的精度太低,不适合用于做财务软件,财务涉及到钱的问题,要求精度较高,所以在java中有一个基础的类库名为:java.math.BigDecimal,但这个BigDecimal类型是引用类型不是基础类型,切记!!!

    在讲单精度浮点数(float)的时候,差不多顺道把double之间的区别讲了哈哈,所以最后给张很经典的图片“敷衍敷衍”下,哈哈哈 哎哎哎..别打...别打...别打脸QAQ

    ea4ee312a600fda2b710a1c2ee56260f.png

    想深入了解浮点数在计算机中存储方式可以参考这篇文章

    浮点数在计算机中存储方式

    展开全文
  • 在C语言中,单精度浮点数(float)和双精度浮点数(double)类型都是用来储存实数双精度是用记忆较多,有效数字较多,数值范围较大。
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...

    作为一名java学习者,怎能不懂这些java基础中的基础呢?本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。

    30f6733ee811fcf550af0502f164f63e.png

    浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double

    至于浮点型就是跟int ,string类型差不多。都是数据类型。

    浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而恰恰小数点可以在相应的二进制的不同位置浮动,可能是这样就被定义成浮点型了。~不得不佩服这文化程度,定义个数据名称都这么有深度~

    浮点型常量 Java的实常数有两种表示形式:1、 十进制数形式:由数字和小数点组成,且必须有小数点,如0.123 , 123.0

    2、科学计数法形式:如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数(当然也包括负整数)。

    科学计数法中的E

    了解浮点型常量 Java的实常数有两种表示形式之后,很有必要给各位科普科普下科学计数法中E的面貌了~E是指数的意思,E代表的英文是exponent,E表示10的多少次方的意思。

    比如7.823E5 = 782300 这里E5表示10的5次方,再比如54.3E-2 = 0.543这里E-2表示10的-2次方

    再补充一点(针对负次方理解)一个数的负几次方就是这个数的几次方的倒数。

    比如: 2的负1次方=2的1次方分之一=1/2

    比如: 3的负2次方=3的2次方分之一=1/9

    单精度浮点数(float)单精度浮点数在机内占4个字节、有效数字8位、表示范围:-3.40E+38 ~ +3.40E+38

    在Java语言当中,所有的浮点型字面值 ~【V8提示】浮点型简单来说就是表示带有小数的数据~ 默认当做double类型来处理,要想该字面值当做float类型来处理,需要在字面值后面添加F/f,或者强制装换为float。具体如下代码:public static void main(String[] args) {

    //3.10是浮点型,浮点型字面值默认当做double类型来处理,直接编译通过;

    double d=3.10;

    //3.10是浮点型,则必须加 F或者f,若没加,直接编译不通过,会报错“损失精度”

    float f=3.10; //编译出错会报错“损失精度”

    // 解决办法:

    // 第一种方式:强制类型转换

    float f1=(float)5.1;

    // 第二种方式:没有类型转换;

    folat f2=5.1f;

    }

    再来看看下面的测试,结果肯定十之八九会在意料之外,哈哈~public static void main(String[] args) {

    float a = 12345678.90123456789f;

    double b=0.12345678901234567890;

    float c=0.12345678901234567890f;

    System.out.println(a);

    System.out.println(b);

    System.out.println(c);

    打印结果

    a = 1.2345679E7

    b = 0.12345678901234568

    c = 0.12345679

    }

    双精度浮点数(double)双精度浮点数在机内占8个字节、有效数字16位、表示范围:-1.79E+308 ~ +1.79E+308

    double的精度太低,不适合用于做财务软件,财务涉及到钱的问题,要求精度较高,所以在java中有一个基础的类库名为:java.math.BigDecimal,但这个BigDecimal类型是引用类型不是基础类型,切记!!!

    在讲单精度浮点数(float)的时候,差不多顺道把double之间的区别讲了哈哈,所以最后给张很经典的图片“敷衍敷衍”下,哈哈哈 ~哎哎哎..别打...别打...别打脸QAQ~

    1295eb5af6c3e237a4589e8b63b02422.png

    本文来自 java入门 栏目,欢迎学习!

    展开全文
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...

    作为一名java学习者,怎能不懂这些java基础中的基础呢?本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。

    4dd659066cae1717d9d31ca55828bd50.png

    浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double

    至于浮点型就是跟int ,string类型差不多。都是数据类型。

    浮点型浮点型别给我整些花里胡哨的定义,浮点型简单来说就是表示带有小数的数据,而恰恰小数点可以在相应的二进制的不同位置浮动,可能是这样就被定义成浮点型了。~不得不佩服这文化程度,定义个数据名称都这么有深度~

    浮点型常量 Java的实常数有两种表示形式:1、 十进制数形式:由数字和小数点组成,且必须有小数点,如0.123 , 123.0

    2、科学计数法形式:如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数(当然也包括负整数)。

    科学计数法中的E

    了解浮点型常量 Java的实常数有两种表示形式之后,很有必要给各位科普科普下科学计数法中E的面貌了~E是指数的意思,E代表的英文是exponent,E表示10的多少次方的意思。

    比如7.823E5 = 782300 这里E5表示10的5次方,再比如54.3E-2 = 0.543这里E-2表示10的-2次方

    再补充一点(针对负次方理解)一个数的负几次方就是这个数的几次方的倒数。

    比如: 2的负1次方=2的1次方分之一=1/2

    比如: 3的负2次方=3的2次方分之一=1/9

    单精度浮点数(float)单精度浮点数在机内占4个字节、有效数字8位、表示范围:-3.40E+38 ~ +3.40E+38

    在Java语言当中,所有的浮点型字面值 ~【V8提示】浮点型简单来说就是表示带有小数的数据~ 默认当做double类型来处理,要想该字面值当做float类型来处理,需要在字面值后面添加F/f,或者强制装换为float。具体如下代码:public static void main(String[] args) {

    //3.10是浮点型,浮点型字面值默认当做double类型来处理,直接编译通过;

    double d=3.10;

    //3.10是浮点型,则必须加 F或者f,若没加,直接编译不通过,会报错“损失精度”

    float f=3.10; //编译出错会报错“损失精度”

    // 解决办法:

    // 第一种方式:强制类型转换

    float f1=(float)5.1;

    // 第二种方式:没有类型转换;

    folat f2=5.1f;

    }

    再来看看下面的测试,结果肯定十之八九会在意料之外,哈哈~public static void main(String[] args) {

    float a = 12345678.90123456789f;

    double b=0.12345678901234567890;

    float c=0.12345678901234567890f;

    System.out.println(a);

    System.out.println(b);

    System.out.println(c);

    打印结果

    a = 1.2345679E7

    b = 0.12345678901234568

    c = 0.12345679

    }

    双精度浮点数(double)双精度浮点数在机内占8个字节、有效数字16位、表示范围:-1.79E+308 ~ +1.79E+308

    double的精度太低,不适合用于做财务软件,财务涉及到钱的问题,要求精度较高,所以在java中有一个基础的类库名为:java.math.BigDecimal,但这个BigDecimal类型是引用类型不是基础类型,切记!!!

    在讲单精度浮点数(float)的时候,差不多顺道把double之间的区别讲了哈哈,所以最后给张很经典的图片“敷衍敷衍”下,哈哈哈 ~哎哎哎..别打...别打...别打脸QAQ~

    04a42626e6672cf17e4be79d5a2270b2.png

    本文来自 java入门 栏目,欢迎学习!

    展开全文
  • 双精度浮点数double

    千次阅读 2019-03-09 12:28:24
    双精度浮点数(double)是计算机使用一种数据类型。比起单精度浮点数,双精度浮点数(double)使用 64 位(8字节) 来存储一个浮点数。 它可以表示十进位制15或16位有效数字。 sign bit(符号): 用来表示正负号 ...
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...
  • 本节书摘来自华章出版社《Core Data...2.6 单精度浮点数与双精度浮点数 对于属性来说,单精度浮点数(float)和双精度浮点数(double)这两种数据类型可以看作带小数点非整数。它们都可以用来表示实数,但也都有...
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...
  • 双精度浮点数(double)       Decimal为SQL Server、MySql等数据库一种数据类型,不属于浮点数类型,可以在定义时划定整数部分以及小数部分位数。使用精确小数类型不仅能够保证数据计算更为精确,还可以节省...
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...
  • 本文都是下面文章开头6个问题的解答:张雅宸:浮点数的二进制表示以及几个例子​zhuanlan.zhihu.com问题1int 当两个数字都是float类型时,相乘的结果却是58...0.58 * 1000.58的双精度表示是:0 01111111110 0010100...
  • Python“float”类型和PostgreSQL“double precision”类型是否基于相同C实现?这可能不是真正潜在问题,但不管怎样,当我试图在两种环境中操纵少量数字时,我得到结果是:在Python上(2.7.2 GCC 4.2.1,...
  • 其选用精度格式是:双精度格式(64 位二进制数)这篇就稍稍深入了解下双精度浮点数,以及有关于数 Number 问题。IEEE 754 标准IEEE 二进制浮点数算术标准(IEEE 754),是最广泛使用浮点数运...
  • float类型存放双精度的浮点数,具体取值范围依赖于构建pythonc编译器,由于精度受限,进行相等性比较不可靠。如果需要高精度,可使用decimal模块decimal.Decimal数,这种类型可以准确表示循环小数,但是处理...
  • 现代计算机中,一般都以IEEE 754标准存储浮点数,这个标准在内存中存储形式为:对于不同长度浮点数,阶码与小数位分配数量不一样,如下:对于32位精度浮点数,数符分配是1位,阶码分配了8位,尾数分配了...
  • 其选用精度格式是:双精度格式(64 位二进制数)这篇就稍稍深入了解下双精度浮点数,以及有关于数 Number 问题。IEEE 754 标准IEEE 二进制浮点数算术标准(IEEE 754),是最广泛使用浮点数运...
  • 本文都是下面文章开头6个问题的解答:张雅宸:浮点数的二进制表示以及几个例子​zhuanlan.zhihu.com问题1int c = 0.58 * 100; printf("%dn",c); //57 int x = 0.58f * 100.0f; printf("%dn",x); //58当两个数字都是...
  • 前言0.1 + 0.2 是否等于 0.3 作为一道经典面试题,已经广外熟知,说起原因,大家能回答出这是浮点数精度问题导致,也能辩证看待这并非是 ECMAScript 这门语言问题,今天就是具体看一下背后原因。数字类型...
  • Go语言有float32和float64两种浮点数类型,对应IEEE754标准的单精度和双精度的浮点数。我们先看看浮点数的基本用法:fmt.Println(0.5)fmt.Println(5E-1)//5x10^-1=0.5fmt.Println(5)fmt.Println(5E0)//5x10^0=5fmt.....
  • 看到一种整数方法 if(x < 0 != y < 0) 由此, double x,y; if( fabs(0.0 - x) <...目前想到比较合适判断方法。...此外这里还有一种强制转换类型求符号位方法。 /** * Get x ...
  • 如果某个数据没有被指定数据类型,那么 MATLAB 会用双精度浮点数来存储它。为了得到其他类型的数值类型,可以使用类型转换函数。MATLAB 中的双精度浮点数和单精度浮点数均采用 IEEE 754 中规定格式来定义。其表示...
  • 经常会碰到一个问题,"为什么 0.1 + 0.2 !== 0.3?...= Number.EPSILON复制代码IEEE 754 64 位浮点类型IEEE 754IEEE 754 规定了四种表示浮点数值方式:单精确度(32位)、精确度(64位)、延伸单精确...
  • 不仅 Python 如此,所有浮点数规范遵从IEEEE754二进制浮点数算术标准(ANSI/IEEE Std 754-1985)编程语言,比如 C,同样如此(如果想在C环境中验证话,请使用 double 类型)。在我们在Python IDLE 中验证一下:&...
  • 最近在处理一个存档文件,用两个字节来保存浮点数,不能理解,最后找到了这么一种数据类型:半精度浮点数 Python原生不支持这样东西,需要外挂numpy,方可将字节HEX转为半精度浮点 如果是字符串类型的“3c...
  • 简单引用百度百科说明:  半精度浮点数是一种计算机使用二进制浮点数数据类型... 与Single(单精度浮点数)、Double(双精度浮点数)相比,Half(半精度浮点数)使用场合并不多,使用频率也不高,但在一些...
  • 最近在处理一个存档文件,用两个字节来保存浮点数,不能理解,最后找到了这么一种数据类型:半精度浮点数Python原生不支持这样东西,需要外挂numpy,方可将字节HEX转为半精度浮点如果是字符串类型的“3c00”...
  • 由于JavaScript只有num类型,所以进制转换中单精度和双精度浮点数没法直接转换,下面是根据公式计算,原理网上有。背景是我通过udp接收终端远程传输modbus数据,解析出来十六进制数据需转换成单精度和双精度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,637
精华内容 654
关键字:

双精度浮点数的类型