首页 > 产品 > 知识 > 单精度,C语言中单精度双精度怎么理解啊

单精度,C语言中单精度双精度怎么理解啊

来源:整理 时间:2023-09-01 17:55:50 编辑:智能门户 手机版

本文目录一览

1,C语言中单精度双精度怎么理解啊

凡是带小数点的书,都是单精度或双精度的一种。双精度比单精度的精确度高,也就是小数点后面的数更多。普遍都使用双精度的,你可以无视单精度

C语言中单精度双精度怎么理解啊

2,VB中单精度数是什么意思0是不是单精度数

单精度和双精度表示的范围不同而已,双精度更精确一点(小数点后面多一些,指数也更高),主要都是用来表示小数,0可以是单精度数字,但是平时你直接写数字0的话系统会判定为整形

VB中单精度数是什么意思0是不是单精度数

3,数据的单精度和双精度是什么意思还有长双精度

数值型:整型与实型1、 整型数据(integer long)Integer和Long型数值都是整数,用户有定义某一变量为整形变量后,给这一变量只能赋予整数。整数要比浮点数运算速度快并且占用内存少。Integer型的数值有一定的范围,-32768~32767,如果超出这一范围,就要用Long。2、 实型数值(single double)单精度(Single)和双精度(Double)型数值即为浮点数值,它表示的是带小数的实数。单精度型能精确到七位,而双精度能精确到15位。用户在选用这些数据类型时,要注意变量所取值的范围。并且数值为整数时,为了运算速度,不用把变量硬定义为浮点型。对于大的浮点数,可用D,E格式输入输出。

数据的单精度和双精度是什么意思还有长双精度

4,什么是c语言里面的单精度

单精度、双精度、长双精度是以他们的有效数字加以区分的。 单精度的有效数字是7位,用float定义。就是说它在7位有效数字之外的位做加减等运算的结果很可能结果不准确。如float的a=100000000,a+20的结果不是100000020,他只保证100000000是准确的 双精度的话可以保证16位有效数字是准确,长双精度的是19位 这样可以吗?
其实就是有效位数不一样。 浮点型变量分为单精度(float)、双精度(double)和长双精度(long double)3类。在turbo c 中: 比特(位)数 有效数字 float 32 6-7 double 64 15-16 long double 128 18-19 ansi c 并未具体规定每种类型数据的长度、精度、数值范围,有的系统将double所增加的32位全用于存放小数部分,这样可以增加数值的有效范围,减少舍入误差。有的系统则将所增加的位(bit)一部分存放指数部分,这样可以扩大数值范围

5,什么是单精度和双精度数据

此文系百度网友提供,本人转载以解提问者心中之惑。单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面),在C语言中单精度类型称为浮点类型(Float),顾名思义是通过浮动小数点来实现数据的存储。这两个数据类型最早是为了科学计算而产生的,他能够给科学计算提供足够高的精度来存储对于精度要求比较高的数值。但是与此同时,他也完全符合科学计算中对于数值的观念: 当我们比较两个棍子的长度的时候,一种方法是并排放着比较一下,一种方法是分别量出长度。但是事实上世界上并不存在两根完全一样长的棍子,我们测量的长度精度受到人类目测能力和测量工具精度的限制。从这个意义上来说,判断两根棍子是否一样长丝毫没有意义,因为结果一定是False,但是我们可以比较他们两个哪个更长或者更短。这个例子很好地概括了单精度/双精度数值类型的设计初衷和存在意义。 基于上述认识,单精度/双精度数值类型从一开始设计的时候,就不是一个准确的数值类型,他只保证在他这个数值类型的精度之内是准确的,精度之外则不保证,比方说,一个数值5.1,很可能存储在单精度/双精度数值中的实际值是5.100000000001或者5.09999999999999。导致这个现象的原因我们可以通过两种方式来解释: 简单的解释方法: 你可以尝试在任何一个控件的属性面板中,设定他的宽度为:3.2CM,当你输入完毕后,你会发现值自动变成了3.199cm,无论你怎么改,你都无法输入3.200CM,因为实际上在电脑中存储的并不是CM为单位的数值,而是“缇”为单位的数值,而“缇”和CM之间的比值,是个很难被除尽的数,因此你输入完毕后,电脑自动转换成了最接近的“缇”值,然后再转换成厘米显示到属性面板上,这一乘一除,两次四舍五入,误差就出来了。单精度/双精度也是类似的原理,其实在二进制存储的时候,单精度/双精度都采用了类似相近分数的方法,而这样的存储是不可能做到准确的。 深入的解释方法: 让我们来看看我们存储到数字介质中的单精度/双精度值到底是怎么样的,我们使用如下代码对单精度类型进行一个解剖: Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Sub floatTest() Dim dblVar As Single dblVar = 5.731 / 8 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar End Sub Public Sub dblOutput(ByVal dblVar As Single) Dim bytVar(3) As Byte Dim i As Integer, j As Integer Dim strVar As String CopyMemory ByVal VarPtr(bytVar(0)), ByVal VarPtr(dblVar), 4 strVar = dblVar & ": " For i = 3 To 0 Step -1 For j = 7 To 0 Step -1 strVar = strVar & (bytVar(i) And 2 ^ j) / 2 ^ j Next j strVar = strVar & " " Next i Debug.Print strVar End Sub 运行后我们得到输出结果(输出格式为高位左,低位右): .716375: 00111111 00110111 01100100 01011010 1.43275: 00111111 10110111 01100100 01011010 2.8655: 01000000 00110111 01100100 01011010 5.731: 01000000 10110111 01100100 01011010 11.462: 01000001 00110111 01100100 01011010 22.924: 01000001 10110111 01100100 01011010 这里,我们把单精度类型转化成了二进制数据输出,这里我们看到,虽然这六个数字完全不同,但是他们的二进制存储惊人地相似,我们看到红色标记部分,每次都是加1,事实上,单精度数据类型使用从高位开始第1位作为正负标记位(绿色),第2位到第9位,是一个跨字节的有符号字节类型数据,这个数值决定了小数点移动的方向和位数(红色),第10位到32位保存一个整数(蓝色)在存储过程中,电脑首先把输入的值不断移位(乘除2)直到这个数的整数部分占用了全部24位的整数位,然后把移动的位数写入浮点部分(红色),而移位后的结果写入整数部分(蓝色和绿色),小数部分则舍弃。求值的时候则是反向过程,先根据正负位和整数位求值,然后根据红色部分的整数来进行移位(乘除2的次方),最终才是我们得到的单精度数值。双精度数值也是同样原理,只是位数更多而已。 通过解剖单精度数值的二进制存储格式,我们可以清楚看到,实际上单精度/双精度的存储,都要通过乘法和除法,其中必有舍入,如果恰好你的数值在除法中被舍入了,那么你赋的初值就很可能与你最终存储的值不完全相同,其中的微小差异,并不与单精度/双精度的设计目标相违背。 当我们在数据库中或者VBA代码中使用一个单精度/双精度数值的时候,也许你从界面上看不到区别,但是在实际的存储中,这个差别却真真切切地就在那里,当你对其进行相等比较的时候,系统只是简单地作二进制的比较,界面上无法体现的微小差异,在二进制比较面前却无处遁形,于是,你的等于比较返回了一个意料之外的False。

6,谁能清楚的给我讲下双精度与单精度的概念谢谢

单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面),在C语言中单精度类型称为浮点类型(Float),顾名思义是通过浮动小数点来实现数据的存储。这两个数据类型最早是为了科学计算而产生的,他能够给科学计算提供足够高的精度来存储对于精度要求比较高的数值。但是与此同时,他也完全符合科学计算中对于数值的观念: 当我们比较两个棍子的长度的时候,一种方法是并排放着比较一下,一种方法是分别量出长度。但是事实上世界上并不存在两根完全一样长的棍子,我们测量的长度精度受到人类目测能力和测量工具精度的限制。从这个意义上来说,判断两根棍子是否一样长丝毫没有意义,因为结果一定是False,但是我们可以比较他们两个哪个更长或者更短。这个例子很好地概括了单精度/双精度数值类型的设计初衷和存在意义。 基于上述认识,单精度/双精度数值类型从一开始设计的时候,就不是一个准确的数值类型,他只保证在他这个数值类型的精度之内是准确的,精度之外则不保证,比方说,一个数值5.1,很可能存储在单精度/双精度数值中的实际值是5.100000000001或者5.09999999999999。导致这个现象的原因我们可以通过两种方式来解释: 简单的解释方法: 你可以尝试在任何一个控件的属性面板中,设定他的宽度为:3.2CM,当你输入完毕后,你会发现值自动变成了3.199cm,无论你怎么改,你都无法输入3.200CM,因为实际上在电脑中存储的并不是CM为单位的数值,而是“缇”为单位的数值,而“缇”和CM之间的比值,是个很难被除尽的数,因此你输入完毕后,电脑自动转换成了最接近的“缇”值,然后再转换成厘米显示到属性面板上,这一乘一除,两次四舍五入,误差就出来了。单精度/双精度也是类似的原理,其实在二进制存储的时候,单精度/双精度都采用了类似相近分数的方法,而这样的存储是不可能做到准确的。 深入的解释方法: 让我们来看看我们存储到数字介质中的单精度/双精度值到底是怎么样的,我们使用如下代码对单精度类型进行一个解剖: Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Sub floatTest() Dim dblVar As Single dblVar = 5.731 / 8 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar dblVar = dblVar * 2 dblOutput dblVar End Sub Public Sub dblOutput(ByVal dblVar As Single) Dim bytVar(3) As Byte Dim i As Integer, j As Integer Dim strVar As String CopyMemory ByVal VarPtr(bytVar(0)), ByVal VarPtr(dblVar), 4 strVar = dblVar & ": " For i = 3 To 0 Step -1 For j = 7 To 0 Step -1 strVar = strVar & (bytVar(i) And 2 ^ j) / 2 ^ j Next j strVar = strVar & " " Next i Debug.Print strVar End Sub 运行后我们得到输出结果(输出格式为高位左,低位右): .716375: 00111111 00110111 01100100 01011010 1.43275: 00111111 10110111 01100100 01011010 2.8655: 01000000 00110111 01100100 01011010 5.731: 01000000 10110111 01100100 01011010 11.462: 01000001 00110111 01100100 01011010 22.924: 01000001 10110111 01100100 01011010 这里,我们把单精度类型转化成了二进制数据输出,这里我们看到,虽然这六个数字完全不同,但是他们的二进制存储惊人地相似,我们看到红色标记部分,每次都是加1,事实上,单精度数据类型使用从高位开始第1位作为正负标记位(绿色),第2位到第9位,是一个跨字节的有符号字节类型数据,这个数值决定了小数点移动的方向和位数(红色),第10位到32位保存一个整数(蓝色)在存储过程中,电脑首先把输入的值不断移位(乘除2)直到这个数的整数部分占用了全部24位的整数位,然后把移动的位数写入浮点部分(红色),而移位后的结果写入整数部分(蓝色和绿色),小数部分则舍弃。求值的时候则是反向过程,先根据正负位和整数位求值,然后根据红色部分的整数来进行移位(乘除2的次方),最终才是我们得到的单精度数值。双精度数值也是同样原理,只是位数更多而已。 通过解剖单精度数值的二进制存储格式,我们可以清楚看到,实际上单精度/双精度的存储,都要通过乘法和除法,其中必有舍入,如果恰好你的数值在除法中被舍入了,那么你赋的初值就很可能与你最终存储的值不完全相同,其中的微小差异,并不与单精度/双精度的设计目标相违背。 当我们在数据库中或者VBA代码中使用一个单精度/双精度数值的时候,也许你从界面上看不到区别,但是在实际的存储中,这个差别却真真切切地就在那里,当你对其进行相等比较的时候,系统只是简单地作二进制的比较,界面上无法体现的微小差异,在二进制比较面前却无处遁形,于是,你的等于比较返回了一个意料之外的False。 参考: http://wenwen.sogou.com/z/q796013106.htm
就是一个取值的范围问题 会影响到运算的速度
单精度是一个机器字节长度,也就是32位, 双精度是64位 都是浮点运算. 3.14159用单精度完全可以进行运行运算,因为没有超出它的表示范围. 双精度比你单精度表示的数范围更大, 所以,用双精度也可以表示. 只是双精度就浪费了
文章TAG:单精度C语言中单精度双精度怎么理解啊

最近更新

  • 会议音响系统,会议室音响系统价格会议音响系统,会议室音响系统价格

    会议室音响系统价格2,如何搭建简单的会议室音响系统3,什么是会议室音响系统4,会议室音响扩声系统如何设计和选择1,会议室音响系统价格面积120平左右!主音箱deliyaf25一对3300(美国)双十五寸50.....

    知识 日期:2023-09-01

  • 百度百发数据,百度大数据高考热门院校百度百发数据,百度大数据高考热门院校

    1.他在比赛中表现很好,每次都能以百发100命中目标。百发100表示百发100表示形容射箭或射击准确,每次都击中目标,中国中证广发-1百发100指数基金(以下简称百发100)自推出四个多月以来,涨幅.....

    知识 日期:2023-09-01

  • 爱你找到机器人和小白爱你找到机器人和小白

    公子小白Smart机器人如何视频?中国十佳机器人公司家机器人品牌推荐1。菲娜扫地机器人,你和你奶奶在神授机器人里唱过什么歌?移动人工智能机器人下载Son小白Intelligent机器人app如何在软.....

    知识 日期:2023-09-01

  • alpha ebot机器人alpha ebot机器人

    alphaebot如何重置玩具使用以下步骤恢复连接WiFi的Roomba的出厂设置。目前市场上共有6个产品系列,包括室内外擦拭机器人(ebotscluber75系列),可用于医用级消毒的擦拭室内机器人(ebotsclu.....

    知识 日期:2023-09-01

  • zuk自动耳机模式,荣耀9手机配置信息:先储存电量后才开机zuk自动耳机模式,荣耀9手机配置信息:先储存电量后才开机

    荣耀9手机配置信息如下:1,可以下载第三方定时关机软件,智能手机需要先储存电量,然后才能再次开机,红灯一直亮着手机无法开机的解决方案是:1,只需在手机关机的情况下按住音量调高键和电.....

    知识 日期:2023-09-01

  • 怎么删除手机qq数据,手机qq数据删除,电脑端也会删除吗怎么删除手机qq数据,手机qq数据删除,电脑端也会删除吗

    如何清除qq数据?苹果手机怎么清理qq数据?qq数据MayI删除?小米手机管家呢删除qq聊天记录?qq数据如何清除qqAll数据步骤:第一,删除所有好友,第二,。输入qq安全设置中心,删除安全验证方式手机号码.....

    知识 日期:2023-09-01

  • 2016就业数据,大数据以后出来就业怎么样2016就业数据,大数据以后出来就业怎么样

    就业数据显示2016年劳动力失业率为20%...假设有5400人,2016年劳动力失业率为20%,那么“5400”就业,是多少人?就业人数为60人,从2016年的20%下降到2017年的10%。就业数据显示2016年劳动力失.....

    知识 日期:2023-09-01

  • 广州 数据开放,数据开放的意义广州 数据开放,数据开放的意义

    广州属于丘陵地区。广州你属于哪些城市?广州城市路况调查及改善建议广州路况太窄很多车都过不去,浅析中国对外开放战略世界is开放世界,经济全球化是当今时代的主旋律,广州属于国内一线城市.....

    知识 日期:2023-09-01