精华内容
下载资源
问答
  • 在C语言中,单精度浮点数(float)和双精度浮点数(double)类型都是用来储存实数的,双精度是用记忆较多,有效数字较多,数值范围较大。
  • 什么是双精度浮点数

    千次阅读 2021-05-23 02:07:56
    问题一:什么是单、双精度浮点数浮点就是小数点位置不确定,比如123.43,6557.521.在C语言中,一般单精度数据类型比如int,数据的范围是2的31次方,而双精度类型的整型比如long int的数据范围是2的63次方.所以双精度和单...

    问题一:什么是单、双精度浮点数浮点就是小数点位置不确定,比如123.43,6557.521.在C语言中,一般单精度数据类型比如int,数据的范围是2的31次方,而双精度类型的整型比如long int的数据范围是2的63次方.所以双精度和单精度主要的区别在于数据的范围大小.

    通俗的讲

    双精度的精度比单精度高

    表示的小数点后的位数多

    比方说单精度能最小表示到0.01

    双精度就能表示到0.0001

    以上只是例子,实际的精度不是这样,具体到多少记不大清楚了

    问题二:什么叫单精度浮点型?什么叫双精度浮点型?单精度浮点型(float )专指占用32位存储空间的单精度(single-precision )值。单精度在一些处理器上比双精度更快而且只占用双精度一半的空间,但是当值很大或很小的时候,它将变得不精确。

    double float数据类型,计算机中表示实型变量的一种变量类型。此数据类型与单精度数据类型(矗loat)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,通常情况,单精度浮点数占4字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,;双精度型占8

    个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308。

    问题三:C语言中单精度浮点数和双精度分别如何表示?有什么差别?类型 比特数 有效数字 数值范围 float 32 6-7 -3.4*10(-38)~3.4*10(38) double 64 15-16 -1.7*10(-308)~1.7*10(308) long double128 18-19 -1.2*10(-4932)~1.2*10(4932)简单来说,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++6.0平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位,但在我的电脑且VC++6.0平台中默认显示同样是6位有效数字(见我的double_float文件)还有,有个例子:在C和C++中,如下赋值语句float a=0.1;编译器报错:warning C4305: 'initializing' : truncation from 'const double ' to 'float '原因:在C/C++中(也不知道是不是就在VC++中这样),上述语句等号右边0.1,我们以为它是个float,但是编译器却把它认为是个double(因为小数默认是double),所以要报这个warning,一般改成0.1f就没事了。通常的做法,经常使用double,而不喜欢使用float

    问题四:浮点数的单精度和双精度是什么意思?高级语言的简单数据类型的一种,单精度浮点数占据32位二进制,1位为符号位,0代表正数,1代表负数,8位指数位,即指数可以达到10进制数据的2的8次方,尾数23位,即尾数可以达到2的23次方。

    问题五:什么叫单精度浮点型和双精度浮点型就是精确度,比如float就是精确到小数点后面4个日双精度double精确到小数点后面8个0。。

    问题六:双精度浮点数在C语言中是什么意思?就是double型啊.单精度浮点数float是32位,double则是64位,位数多,精度当然越大.具体到浮点数结构,你随便一搜就有了,我要说也顶多是胆网址贴过来.

    问题七:单精度float 和双精度double到底是什么区别啊单精度实数在内存中占32bit 有效数字为6~7位

    双精度实数占内存单元为64bit 有效数字为15~16位

    没有说明时,实型常量是作为双精度处理的,若要使用单精度需在后面加上字母f或F,如123.45f

    问题八:c语言分别定义一个单精度和一个双精度的浮点数float a;//单精度

    double b;//双精度

    问题九:单精度浮点和双精度浮点有什么区别如同字面, 就是表示精度的区别。双精度浮点数使用8个字节表示,有大约16位十进制有效数字。而单精度饥点数使用4字节,只有7位十进制有效数字。PS. Titan并没有阉割双精度性能,它在驱动中是有个开关的,打开后提供完整的双精度性能,但显卡会略微降频运行,实际峰值DP计算速度1.3TFlops。

    展开全文
  • 浮点数有效数字位数

    千次阅读 多人点赞 2019-01-28 01:49:54
    过去有一种很普遍的说法是单精度浮点数有效数字是6到7位。同时也有一个很普遍的问题就是:“6到7位是什么意思?到底是6位还是7位?”。现在似乎主流认知已经变成了单精度浮点数有效数字就是7位。事实究竟是怎么...

    过去有一种很普遍的说法是单精度浮点数的有效数字是6到7位。同时也有一个很普遍的问题就是:“6到7位是什么意思?到底是6位还是7位?”。现在似乎主流认知已经变成了单精度浮点数的有效数字就是7位。事实究竟是怎么样的?

    先说结论

    单精度浮点数可以保证7位10进制有效数字。如果一个数字用10进制表示时有效数字位数大于等于7位,那么用单精度浮点数记录的话,能确保至少正确记录前7位
    为什么说“至少”?比如,4294967296有10位10进制有效数字,但只有1位2进制有效数字(2进制表示是1后面32个0)。我们可以验证单精度浮点数是可以正确记录所有10位有效数字的。但上面只是特殊情况,对于随便给出的一个数,只有第7位和之前的有效数字是能确信正确的。

    凭什么说就是7位,为什么不是6位、8位?

    最简单的2进制的情况

    首先,我假设我们知道一个单精度浮点数种有24位2进制的有效数字(不知道的同学,请先自行搜索IEEE 754)。很显然,对于有24位或者以上2进制有效数字的数,单精度浮点数能保证前24位。

    再看看16进制

    我们知道16进制的1位对应2进制的4位(不知道的同学,……姑且4位2进制数刚好有16种不同的情况)。2进制的24位刚好对应16进制的6位,也就是能保证6位16进制的有效数字。
    但是假设我们只有23位2进制有效数字的话,那么我们就只能保证5位了。

    接下来我们更具体地看一下。假设有16进制数 8765432 1 ( 16 ) 87654321_{(16)} 87654321(16),我们可以写成 8.765432 1 ( 16 ) × 1 6 7 8.7654321_{(16)} \times 16^7 8.7654321(16)×167。2进制的话,可以写成 1000.011 1 ′ 011 0 ′ 010 1 ′ 010 0 ′ 001 1 ′ 001 0 ′ 000 1 ( 2 ) × 2 28 1000.0111'0110'0101'0100'0011'0010'0001_{(2)} \times 2^{28} 1000.0111011001010100001100100001(2)×228如果我们只有24位2进制有效数字,则后面一部分有效数字无法记录,就成了 1000.011 1 ′ 011 0 ′ 010 1 ′ 010 0 ′ 001 1 ( 2 ) × 2 28 1000.0111'0110'0101'0100'0011_{(2)} \times 2^{28} 1000.01110110010101000011(2)×228也就是 8.7654 3 ( 16 ) × 1 6 7 8.76543_{(16)} \times 16^7 8.76543(16)×167。如果再减少1位2进制有效数字的话 1000.011 1 ′ 011 0 ′ 010 1 ′ 010 0 ′ 00 1 ( 2 ) × 2 28 1000.0111'0110'0101'0100'001_{(2)} \times 2^{28} 1000.0111011001010100001(2)×228我们将只有3位2进制数001能用来表示最后1位16进制有效数字。我们知道,3位2进制数只有8种不同情况,无法区分16进制1位数的16种情况。更具体地,比如这样我们无法区分 8.7654 3 ( 16 ) × 1 6 7 8.76543_{(16)} \times 16^7 8.76543(16)×167 8.7654 2 ( 16 ) × 1 6 7 8.76542_{(16)} \times 16^7 8.76542(16)×167,因为它们的最后一位都会被表示成001。

    可以看到,无法保证有效数字的某一位,意味着我们没办法区分这一位可能出现的所有情况。反过来,如果说我们能保证某一位,说明去掉这一位之前所用掉的2进制有效数字位数后,我们还能剩下足够的2进制位数来区分这一位可能出现的所有情况

    回过头看前面我们用1位2进制表示10位10进制有效数字的情况。1位2进制有效数字有可能表示出10位的10进制有效数字,但是要能区分出10位10进制数的所有情况,我们还是需要更多的2进制位。

    万恶的10进制

    如果能见到神的话,我一定要问他人为什么要长10个指头而不是8个——如果不能是16个的话……

    下面我们要解决的问题是:去掉10进制某一位之前用掉的2进制有效数字后,我们怎么计算还剩下多少2进制位数。

    高能预警:这将不是个整数

    我们知道3位2进制数有8种不同情况,4位2进制数有16种不同情况。而每位有10种情况的10进制要对应2进制的多少位?咱们姑且直接用这结果 l o g 2 10 ≈ 3.322 log_210 \approx 3.322 log2103.322对于单精度浮点数,第N位10进制有效数字后还有 24 − N × l o g 2 10 24 - N \times log_210 24N×log210个2进制位可用。如果说单精度浮点数能保证N位有效数字,意味着N位后刚好不再有足够的2进制位数能区分10种不同情况。可以很容看出,这个N应该是让 N × l o g 2 10 N \times log_210 N×log210不大于24的最大的整数。也就是 N = ⌊ 24 l o g 2 10 ⌋ = 7 N = \lfloor {24 \over log_210} \rfloor = 7 N=log21024=7最终,我们得出N是7。( ⌊ x ⌋ \lfloor x \rfloor x表示对 x x x向下取整)

    至此为止,我们知道了该如何计算有限位数的2进制有效数字能保证的10进制有效数字位数。比如我们还可以计算53位2进制有效数字的双精度浮点数可以保证的10进制位数是 ⌊ 53 l o g 2 10 ⌋ = 15 \lfloor {53 \over log_210} \rfloor = 15 log21053=15

    正篇到此结束。

    后记

    这里开始,我不再保证能尽量说人话。

    换个角度

    因为有 M l o g 2 10 = l o g 2 2 M l o g 2 10 = l o g 10 2 M {M \over log_210} = {log_22^M \over log_210} = log_{10}2^M log210M=log210log22M=log102M所以单精度浮点能保证的有效数字位数等价于 2 24 2^{24} 224(也就是16777216)去掉最高位后的位数。很多人会说这个就是单精度浮点数能表示7位有效数字的原因。从这个角度解释也是可以的,但是直接这么下结论跳过的步骤太多了。而且从这角度解释铺垫起来会麻烦很多。

    “至少”的问题

    为了方便,我们看16进制。

    这个问题用24位有效数字不太好说,我们看23位。上面说了2进制23位是可以确保16进制的5位的。但是 1.234567 8 ( 16 ) × 1 6 7 = 1.001 0 ′ 001 1 ′ 010 0 ′ 010 1 ′ 011 0 ′ 011 1 ′ 100 0 ( 2 ) × 2 28 1.2345678_{(16)} \times 16^7 = 1.0010'0011'0100'0101'0110'0111'1000_{(2)} \times 2^{28} 1.2345678(16)×167=1.0010001101000101011001111000(2)×228保留23位有效数字是 1.001 0 ′ 001 1 ′ 010 0 ′ 010 1 ′ 011 0 ′ 0 1 ( 2 ) × 2 28 = 1.234564 × 1 6 7 1.0010'0011'0100'0101'0110'01_{(2)} \times 2^{28} = 1.234564 \times 16^7 1.0010001101000101011001(2)×228=1.234564×167好像出来了6位。应该很容易注意到,这里16进制的最高位只占用了2进制的1位,所以后面多了3位可用。

    所以计算第N位还能使用的2进制位数,不是简单的用总的2进制位数,减去 ( N − 1 ) × 4 (N - 1) \times 4 (N1)×4。而应该是减去第1位使用的2进制位数后,再减 ( N − 2 ) × 4 (N - 2) \times 4 (N2)×4

    你可能觉得这样我们前面的方法就不准确的了,其实不然。因为我们要计算的是位数最少的情况,而这样只会让位数变多。

    除了最开始提到的特殊情况,这是单精度浮点数正确表示超过7位10进制有效数字的更普遍的一种特殊情况。当然,这样最多只能表示出8位。

    非整数的位数是什么鬼

    拿10进制来讲,我们可以说第N位和 1 0 N 10^N 10N是对应的。比如我们想把3往左移动2位,就可以 3 × 1 0 2 = 300 3 \times 10^2 = 300 3×102=300。于是往左移动半位也就是 3 × 1 0 0.5 = 3 10 ≈ 9.487 3 \times 10^{0.5} = 3 \sqrt {10} \approx 9.487 3×100.5=310 9.487
    前面10进制1位对应2进制 l o g 2 10 ≈ 3.322 log_210 \approx 3.322 log2103.322。很显然 2 l o g 2 10 = 10 2^{log_210} = 10 2log210=10

    展开全文
  • 浮点数7位有效数字。 双精度数16位有效数字浮点数取值范围: 负数取值范围为 -3.4028235E+38 到 -1.401298E-45,正数取值范围为 1.401298E-45 到 3.4028235E+38。 双精度数取值范围: 负值取值范围-1....

    浮点数7位有效数字。
    双精度数16位有效数字。

    浮点数取值范围:
    负数取值范围为 -3.4028235E+38 到 -1.401298E-45,正数取值范围为 1.401298E-45 到 3.4028235E+38。

    双精度数取值范围:
    负值取值范围-1.79769313486231570E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。

    C/C++中浮点数的表示遵循IEEE 754标准。
    一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M(如下)。
      Float
    S--------E-------M
    1位-----8位-----23位

      Double
    S--------E-------M
    1位-----11位----52位

    浮点数的精度取决于尾数部分。尾数部分的位数越多,能够表示的有效数字越多。 

    单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1) = 16777216。因为 10^7 < 16777216 < 10^8,所以说单精度浮点数的有效位数是7位。 

    双精度的尾数用52位存储,2^(52+1) = 9007199254740992,10^16 < 9007199254740992 < 10^17,所以双精度的有效位数是16位。
     

    浮点数的标准二进制数值表示:

     IEEE 754

    短浮点数和有符号整型一样,符号位是1,表示负数;符号位是0,表示正数。

    指数位部分既可表示正指数又可表示负指数。因此,指数位部分通过实际指数值加上偏差值127的方法计算。例如:实际指数值为-15,该浮点数的指数位值是112。由于偏差值的作用,实际指数值的有效范围为-127到128。

    有效位表示标准二进制数值的分数部分。标准二进制数值大于1小于10并包含小数部分。小数部分很重要,因此被包含在浮点数格式中。标准值通常都大于1,因此格式中无需包含1。

    下文为将一个十进制数字转换成短浮点数值的实例。  

     实例: 22.625

                   22 = (10110)2

                   0.625 = (.101)2

                   10110.101 = 1.0110101 x 2^4 (标准值)

    符号位 = 0 (正数)

    指数位 = 4 + 127  = 131 = 10000011

    有效位 = 0110101[16个零]

    短浮点数 = 0 10000011 0110101[16个零]  

    如果将一个短浮点数值转换成十进制数值,应用如等式1-1。

    数值 = (-1)^符号位x [1 + (有效位/2^23)] x 2^(指数位 –127)
     

    展开全文
  • 单精度浮点数与双精度浮点数区别

    万次阅读 2020-04-06 15:14:35
    单精度浮点数与双精度浮点数区别 1、所占的内存不同 单精度浮点数占用4个字节(32位)存储空间来存储一个...单精度浮点数的数值范围为-3.4E38~3.4E38,而双精度浮点数可以表示的数字的绝对值范围大约是:-2.23E30...

    单精度浮点数与双精度浮点数区别

    1、所占的内存不同

    单精度浮点数占用4个字节(32位)存储空间来存储一个浮点数,包括符号位1位,阶码8位,尾数23位。

    而双精度浮点数使用 8个字节(64位)存储空间来存储一个浮点数,包括符号位1位,阶码11位,尾数52位。

    2、所存的数值范围不同

    单精度浮点数的数值范围为-3.4E38~3.4E38,而双精度浮点数可以表示的数字的绝对值范围大约是:-2.23E308 ~ 1.79E308。E表示10的多少次方,如3.4E38指的是3.4乘以10的38次方。

    3、十进制下的位数不同

    单精度浮点数最多有7位十进制有效数字,如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入。

    双精度浮点数可以表示十进制的15或16位有效数字,超出的部分也会自动四舍五入。
    在这里插入图片描述

    整型:

    byte:-2^7 ~ 2^7-1,即-128 ~ 127。1字节。Byte。末尾加B

    short:-2^15 ~ 2^15-1,即-32768 ~ 32767。2字节。Short。末尾加S

    有符号int:-2^31 ~ 2^31-1,即-2147483648 ~ 2147483647。4字节。Integer。

    无符号int:0~2^32-1。

    long:-2^63 ~ 2^63-1,即-9223372036854774808 ~ 9223372036854774807。8字节。Long。末尾加L。(也可以不加L)

    展开全文
  • #include "stdio.h"#include "conio.h"void main(){...}观察在VC6,WinTC中的运行结果,可能是0.1234567891043281560000.12345678901234567700而一般在C语言教材上说:浮点数7位有效数字。双精度数16位有效数字。单...
  • (1)在内存中占有的字节数不同 单精度浮点数在机内占4个字节 双精度浮点数在机内占8个字节 (2)有效数字位数不同 单精度浮点数有效数字8位 双精度浮点数有效数字16位 (3)所能表示数的范围不同 单精度浮点的表示...
  • 单精度浮点数(float)与双精度浮点数(double)的区别 单精度浮点数(float)与双精度浮点数(double)的...•双精度浮点数有效数字16位 (3)所能表示数的范围不同 •单精度浮点的表示范围:-3.40E+38 ~ +3.40E...
  • 计算机程序中的浮点数分为单精度浮点数和双精度浮点数。单精度和双精度精确的范围不一样。计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。稍大一点的单位是字节(Byte,简写为B)。再大一级的是千...
  • 双精度浮点数double

    千次阅读 2019-03-09 12:28:24
    双精度浮点数(double)是计算机使用的一种数据类型。比起单精度浮点数,双精度浮点数(double)使用 64 位(8字节) 来存储一个浮点数。 它可以表示十进位制的15或16位有效数字。 sign bit(符号): 用来表示正负号 ...
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...
  • 浮点数在计算机中的存储十进制浮点数格式:浮点数格式使用科学计数法表示实数。科学计数法把数字表示为系数(coefficient)(也称为尾数(mantissa)),和指数 (exponent)两部分。比如 3.684*10^2. 在十进制中,指数的...
  • 浮点数在计算机中的存储十进制浮点数格式:浮点数格式使用科学计数法表示实数。科学计数法把数字表示为系数(coefficient)(也称为尾数(mantissa)),和指数 (exponent)两部分。比如 3.684*10^2. 在十进制中,指数的...
  • 双精度浮点数有效位数是16位 一个浮点数由三部分组成:符号位S、指数部分E(阶码)以及尾数部分M。单精度浮点数(float)总共用32位来表示浮点数,其中尾数用23位存储,加上小数点前有一位隐藏的1(IEEE754规约数表示...
  • 本文就带各位温顾温顾java浮点型、单精度浮点数、双精度浮点数。浮点型首先明确java中浮点型数据类型主要有:单精度float、双精度double至于浮点型就是跟int ,string类型差不多。都是数据类型。浮点型浮点型别给我...
  • 双精度浮点数是一种64位(64 bit)的二进制数字格式。包括3个组成部分: 符号位 1位 阶码(指数部分) 11位 尾数(有效数)53位(实际存储52位) 其中,符号位0表示正值,1表示负值; 指数部分存储为无符号数字,可...
  • (1)在内存中占有的字节数不同单精度浮点数在机内占4个字节双精度浮点数在机内占8个字节(2)有效数字位数不同单精度浮点数有效数字8位双精度浮点数有效数字16位(3)所能表示数的范围不同单精度浮点的表示范围:-...
  • 单精度和双精度浮点数数据类型

    千次阅读 2016-07-16 09:58:44
    C、C++中使用到的单精度浮点数(float)类型和双精度浮点数(double)类型是在IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985)中定义的。下面分别从存储格式、内存分布、编码规则、取值范围、有效数字位数和...
  • 双精度浮点数

    2015-12-12 12:43:00
    双精度浮点数   双精度浮点数格式 是一种 计 算机数据格式,在 计 算机存 储 器中占用 8 个字 节 ( 64 bits ),利用“浮点”(浮 动 小数点)的方法,可以表示一个范 围 很大的数 值 。   在 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,670
精华内容 9,468
关键字:

双精度浮点数有效数字