vba单精度excel数据精度设置如何比大小

62.VBA单精度浮点型Single与双精度浮点型Double的区别
浮点型说白了就是科学记数法
浮点型(single)
在中,单精度浮点型(float )专指占用32位存储空间的单精度(single-precision
)值。单精度在一些处理器上比双精度更快而且只占用双精度一半的空间,但是当值很大或很小的时候,它将变得不精确。当你需要小数部分并且对精度的要求不高时,单精度浮点型的变量是有用的。例如,当表示美元和分时,单精度浮点型是有用的。
在中,单精度浮点型是为了提供兼容性,浮点数据类型在功能上等价于数值型。
在VB中,Single 数据类型 Single(单精度浮点型)变量存储为 IEEE 32 位(4
个字节)浮点数值的形式,它的范围在负数的时候是从 -3. 到 -1.,而在正数的时候是从
1. 到 3.。6位
Single 的类型声明字符为感叹号 (!)。
双精度(double)型
C语言中,双精度(double)型占8
个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。&
Single 最多可以显示小数点后面7位 Double
最多可以显示小数点后面14位
Single 数据类型
Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从
-3. 到 -1.,而在正数的时候是从 1. 到
3.。Single 的类型声明字符为感叹号
Double 数据类型
Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,它的范围在负数的时候是从
-1.32E308 到 -4.47E-324,而正数的时候是从
4.47E-324 到 1.32E308。Double
的类型声明字符是数字符号
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。查看: 119|回复: 4
写了个比大小的代码,但是运行速度很慢,求大神看看是什么原因
阅读权限10
在线时间 小时
Dim x As Integer
Dim y As Integer
Dim z As Integer
z = Sheet1.UsedRange.Rows.Count
For x = 1 To z
Sub b(y As Integer)
Dim m As Integer
Dim a As Double
Dim b As Double
Dim c As Integer
Dim d As Integer
Dim z As Integer
z = Sheet1.UsedRange.Rows.Count
For m = y To z
a = Sheet1.Range(&b& & y)
b = Sheet1.Range(&b& & m)
c = Sheet1.Range(&a& & y)
d = Sheet1.Range(&a& & m)
If a & b Then
Sheet1.Range(&b& & y) = b
Sheet1.Range(&b& & m) = a
Sheet1.Range(&a& & y) = d
Sheet1.Range(&a& & m) = c
这是代码,作用就跟EXCEL自带的扩展选定区域的升序排列是一样的 。
但是速度太慢了(大概处理3000条数据)
怎样改能让速度快一点呢?
阅读权限95
在线时间 小时
把数据先读到数组里,再作比对。比对完了再把数组赋值给工作表。不要每一步都直接操作工作单元格。
阅读权限95
在线时间 小时
关闭屏幕刷新,能提速
最好用数组
阅读权限10
在线时间 小时
关闭屏幕刷新,能提速
最好用数组
多谢,回去试试
阅读权限10
在线时间 小时
把数据先读到数组里,再作比对。比对完了再把数组赋值给工作表。不要每一步都直接操作工作单元格。
多谢,回去试试
我还不会用数组,看来要学学了& &
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师VBA数据类型符号“&”表示的数据类型是_________。 A.整数B.长整数C.单精度_答案_百度高考
VBA数据类型符号“&”表示的数据类型是_________。
A.整数B.长整数C.单精度数D.双精度数
第-1小题正确答案及相关解析查看: 4500|回复: 12
[已解决]vba中的各个数据类型的数值范围是怎么算出来的
向单精度single,双精度double等等这些数据类型的数值范围是怎么算出来的?
最后登录 14:30&注册时间 10:05&金币20 &积分26&帖子&
金币20 &积分26&帖子&
香川群子发布于
接近0的最小数值=2^-23*2^-126=2^-149=1.
本帖最后由 香川群子 于
11:05 编辑
'Byte (0-255)
使用1个byte有8个开关来存储数据,所以全部排列组合=2^8=256种状态,对应0-255个数值。
byte = 一个字节,是二进制的8位存储单元,即有8个状态位置存储。以下同
'&=Integer 2 byte (-2^15 to 32,767) 2^16/2
整型变量有2个字节(1个字元)可以存储16个状态位置,
所以一共是 2^16种类的数值。
由于需要包含正负数和0,所以0和正整数取一半区域,另外一半给负数使用。
于是,上半区存储0和正整数、范围0 以及 1- (2^16/2-1)= 0 to 32767 共32768个数值
而下半区存储负数即0范围 -2^16/2 到 -1 即 -32768 to -1 也是32768个数值
'&=Long 4 byte (-2^31 to 2,147,483,647) 2^32/2 &#E9
长整型变量有4个字节(2个字元)可以存储32个状态位置,
所以一共是 2^32种类的数值。
由于需要包含正负数和0,所以0和正整数取一半区域,另外一半给负数使用。
于是,上半区存储0和正整数、范围0 以及 1- (2^32/2-1)= 0 to 2,147,483,647
而下半区存储负数即0范围 -2^32/2 到 -1 即 -2,147,483,648 to -1
'@=Currency 8 byte 2^64/2=9.22E18/10^4
(-922,337,203,685,477.5808 to 922,337,203,685,477.5807)
同理,货币格式有8个字节(4个字元)可存储 2^64种不同的数值。
分上半区0和正数、以及下半区负数,小数点后保留4位。
'!=Single 4 byte(-3. to -1. ) (1. to 3.)
单精度4个字节(2个字元)
'#=Double 8 byte(-1.31E308 to -4.47E-324)(4.47E-324 to 1.32E308 )
双精度8个字节(4个字元)
注意单精度和双精度都是用浮点小数的方法来存储和表示数值的,因此范围比整数大很多。
香川群子 发表于
'Byte (0-255)
使用1个byte有8个开关来存储数据,所以全部排列组合=2^8=256种状态,对应0-255个数值。
前面几个都列了公式那么后面两个,就是单精度和双精度的没有列,不明白那两个数据是怎么来的?
单精度浮点数(Single) 用来表示带有小数部分的实数,一般用于科学计算。
占用4个字节(32位)存储空间,包括符号位1位,阶码8位,尾数23位。
其数值范围为-3.4E38~3.4E38
单精度浮点数n最多有7位十进制有效数字
单精度浮点数的指数用“E”或“e”表示。
单精度浮点数有多种表示形式:
±n.n(小数形式)
±n E ±m(指数形式)
±n.n E ±m (指数形式)
如果某个数的有效数字位数超过7位,当把它定义为单精度变量时,超出的部分会自动四舍五入。
双精度浮点数(double)
用8个字节(64位)存储空间,包括符号位1位,阶码11位,尾数52位。
其它类似。
更详细一点:
二进制浮点数的表示,按美国IEEE(电子及电子工程师协会)表示方法,
称之为IEEE标准754(IEEE,1985),当今流行的计算机几乎都采用这一标准。
IEEE 754在标识符点数时, 每个浮点数均由3个部分组成:
符号位S,指数部分E和尾数部分M。
浮点数可采用以下四种基本格式:
(1)单精度格式(32位):E=8位,M=23位。
(2)扩展单精度格式:E≥11位,M≥31位。
(3)双精度格式(64)位:E=11位,M=52位。
(4)扩展双精度格式(64位):E≥15位,M≥63位。
其中,单精度格式(32位)中的阶码为8位, 另有一位尾数的符号位S,处在最高位。
浮点数的分数部分与有效位部分两者是不同的,
由于IEEE754标准约定在小数点左部有一位隐含位,从而使其有效位实际有24位,
这样便使尾数的有效值变为1M。
阶码部分采用移码表示, 移码值为127,从而使阶码值的范围由原来的1到254,经移码后变为-126到+127。
下面举两个例子来说明IEEE 754标准浮点数的表示:
(1)N=-1.5,它的单精度格式表示为:1
其中,S=1,E=127,M=0.5,
因此N=-1.5。
(2)以下的32位数所表示的单精度浮点数:
其中,S=1,E=129,M=0.25,由公式可知N=-5。
一个浮点数a由两个数m和e来表示:a = m × b^e。
在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。
m(即尾数)是形如±d。ddd。。。ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。
如果m的第一位是非0整数,m称作规格化的。有一些描述使用一个单独的符号位(s 代表+或者-)来表示正负,这样m必须是正的。e是指数。
 对于内部存储数据(10 :
   符号位 (最左侧)S=0。这表示是个正数
   指数  (左侧第2-9位)E=(=(126)10,所以e=E-127=-1。
   尾数  (最后的23位)M=(10)2
& && && && &m=(1.M)2=(1.)10
  该二进制小数转为10进制的计算方式为:
& &&&1 + (1/2+1/4) + (1/32+1/64) + (1/512+1/1024)……
  实际值 N=1.*2^-1=0.
& & (其实,这个数据是0.9的 单精度浮点数 的实际内部存储,可以看到有一定的误差)
 这里继续给出另外几个数字的实例:
  使用竖线|将各个段位分隔显示
  实际值 | 符号位 | ;指数 | ;尾数
  1 | 0 |
  2 | 0 |
  ⒍5 | 0 |
  -6.5 | 1 |
  最大表示范围:单精度浮点数可以表示的范围为±3.40282 * 10^38( 1.1111...1×2^127)
  接近于0的最小值:单精度浮点数可以表示1.175 * 10-38(1.00...0×2^-126)的数据而不损失精度。
  当数值比以上值小的时候,将会由于尾数的有效位数减少而逐步丧失精度(IEEE 754的规定),或者有的系统则直接采用0值来简化处理过程。
  单精度浮点数的实际有效精度为24位二进制,这相当于 24*log102≈7.2 位10进制的精度,所以平时我们说“单精度浮点数具有7位精度”。(精度的理解:当从1.000...02变化为1.000...12时,变动范围为2^23,考虑到因为四舍五入而得到的1倍精度提高,所以单精度浮点数可以反映2^24的数值变化,即24位二进制精度)
  浮点数以有限的32bit长度来反映无限的实数集合,因此大多数情况下都是一个近似值。同时,对于浮点数的运算还同时伴有误差扩散现象。
  特定精度下看似相等的两个浮点数可能并不相等,因为它们的最小有效位数不同。
  由于浮点数可能无法精确近似于十进制数,如果使用十进制数,则使用浮点数的数学或比较运算可能不会产生相同的结果。
  如果涉及浮点数,值可能不往返。值的往返是指,某个运算将原始浮点数转换为另一种格式,而反向运算又将转换后的格式转换回浮点数,且最终浮点数与原始浮点数相等。由于一个或多个最低有效位可能在转换中丢失或更改,往返可能会失败。
条件中如果用到浮点数要小心。
如:msgbox 0.1=1.1-1& & msgbox 0.2=1.2-1&&……直到msgbox 0.9=1.9-1 看一下共有多少false多少true
因此最大数是 1*2^128=456
实际取7位有效数=3.
Powered by}

我要回帖

更多关于 matlab 数据精度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信