VB/VBA的浮点数结构

VB 专栏收录该内容
18 篇文章 0 订阅

 前言

在前篇《VB的整数,你真的了解?》中,向读者介绍整数时提到,计算机里实际上只有整数一种类型。那浮点数是如何表示的呢?浮点数的使用性能是不是比真正的整数要差呢?VB在应用过程中要注意哪些事项呢?本篇将详细分析,来看看吧。

一、浅谈浮点数

人类在进化过程中,发明了很多种度量单位,来量化我们所处的世界。但在客观世界里,没有那么多刚刚好的事。比如银行存款余额,时间,导弹射程,战舰位置等,人类也不可能无限细分度量单位。好比在计算机世界里,我们不能给每个内存单元(字节)都取一个名字,只能给有意义的内存冠名(变量)。

这时浮点数就显得异常重要了,代表着人类对客观世界的把控程度。这种把控充满了主观色彩,可以用”在乎”一词来形容浮点数对人的意义。首先,在不同背景下,需要不同的精度。比如我们很少在意金钱数据角分之后的数据,但是在高能物理界可能需要小数点后N个数位,否则差之毫厘失之千里。其次,精度的转换又常常在不经意间发生。比如朋友来了有好酒,我们出手阔绰,毫不计较。但敌人来了有猎枪,一个子儿也不会多给。

虽然,计算机只认整数,但是我们人更多地是认小数(也即浮点数或实数)的,因为小数才有现实意义。超算和比特币矿机,想必大家有所耳闻,他们都偏重计算,讲究的是算力。如果说比特币矿机有点不务正业,那超算是正儿八经的为科学研究服务吧。很多高精尖领域的研究,都离不开超算。但是衡量超算能力最核心的指标之一,就是浮点运算能力。

最近币市火爆,笔者也有谈到比特币,有朋友问矿机为何要装显卡?其实,就跟浮点数运算有关啦。我们知道显卡专注于提升图像图形的处理能力,而图形的处理就涉及到精度的问题,也就是浮点数的处理喽。而比特币挖矿在非对称加解密、哈希等计算中要涉及浮点数的,所以给矿机加显卡,是可以提高算力的。

二、VB的浮点数结构

1、Single类型

占4字节,6位有效小数。由1Bit符号位、8Bits指数位和23Bits有效数位三部分组成。其结构如下:

那Single又是如何转换为整数的呢?按照IEEE(美国电气和电子工程师学会)的标准,按照以下公式进行转换:

l= (-1)^s * (1 + f) * 2^(e - 127)

其中:l为十进制整数,s为第32bit位的符号(0为正数,1为负数),f为有效小数,e为幂指数。

看上去很复杂,其实在VB里非常简单,将Single变量的内存数据,直接拷贝到Long类型变量的内存里,就完成了转换。

2、Double类型

占8字节,15位有效小数。由1Bit符号位、11Bits指数位和52Bits有效数位三部分组成,结构与Single类似。与十进制转换公式为:l= (-1)^s * (1 + f) * 2^(e - 1023)。

在VB中,需要借助Currency类型,来实现转换。

3、Date类型

占8字节,是VB的日期格式。DATE在WTYPES.H中定义为"typedef double DATE;",所以Date就是Double类型。值得一提的是,其整数部分为年月日,小数部分为时分秒,可以手工实现高精度时间哦。

三、VB浮点数使用过程中要注意哪些?

按浮点数的结构,我们可知浮点数在计算机中,并不等于数学意义上的实数,而是存在人为舍位的近似值。因此时时刻刻牢记精度问题,是正确使用浮点数的前提。

1、浮点数与10进制整数相互转换时,存在精度问题。

2、浮点数谨慎用于相等判断。

3、VB对小数常数、除法结果等默认为Double类型,在计算中只要有小数,都会做Double类型转换,会降低代码性能。在X86的32位机器下,CPU处理Single的速度更快,若精度允许,应尽量使用该类型,否则应统一使用Double类型。

4、VB中若需要更高精度的浮点数,则需借助Decimal类型,该类型支持28位有效小数位,但性能也更低。

欢迎关注BtOfficer及各大自媒体平台同名账号,笔者研发的安全生产框架,专为非IT人士服务,集成海量实用工具,更提供功能齐全的编程接口,重要的是可完美兼容VB家族语言,是非IT潜心于业务生产的利器。关注“BtOfficer”公众号,即可获取深入浅出的开发帮助,系统的底层知识,答疑等福利,还有行业情报,产品经销资格等您来拿哦。

 

  • 3
    点赞
  • 1
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

目录 01001获取Excel版本 01002获取Excel的安装路径 01003获取当前用户名称 01004获取注册组织名称 01005获取当前操作系统的名称和版本号 01006获取启动Excel的路径 01007获取打开Excel文件时的默认路径 01008获取模板保存的默认路径 01009获取库文件夹的路径 01010获取路径分隔符 01011获取Excel主窗口标题栏的名称 01012获取Excel窗口的状态(大小) 01013获取Excel主窗口的高度和宽度 01014获取Excel主窗口的左边界位置和顶端位置 01015获取在Excel主窗口中一个窗口所能占有的最大高度和宽度 01016获取当前打印机名称 01017获取MicrosoftExcel剩余内存 01018获取MicrosoftExcel的总内存 01019获取计算机被Excel占用的内存 01020改变Excel窗口大小 01021改变Excel的显示位置 01022将Excel移动到屏幕以外 01023隐藏Excel 01024改变Excel的标题文字 01025删除Excel的标题文字 01026将Excel设置为全屏显示 01027在状态栏中显示信息 01028显示、隐藏状态栏 01029显示、隐藏编辑栏 01030显示、隐藏常用工具栏 01031显示、隐藏格式工具栏 01032显示、隐藏任务窗格 01033改变鼠标指针形状 01034切换手动、自动计算 01035切换A1引用样式、R1C1引用样式 01036设置按【Enter】键后单元格的移动方向 01037设置最近使用的文件清单中的最多文件数 01038设置新工作簿中的工作表个数 01039设置文件的默认位置 01040设置保存自动恢复文件的时间间隔和保存位置 01041停止屏幕刷新 01042使事件无效 01043使取消键无效 01044不显示警告信息对话框 01045设置使用的打印机 01046安装加载宏 01047利用GetOpenFilename方法获取文件名 01048利用GetOpenFilename方法获取某类型文件名 01049改变GetOpenFilename方法的默认路径 01050改变GetOpenFilename方法的标题文字 01051使用GetOpenFilename方法时出现错误的处理 01052利用GetSaveAsFilename方法获取文件名 01053利用CentimetersToPoints方法将计量单位从cm转换为磅 01054利用InchesToPoints方法将计量单位从in转换为磅 01055显示Excel内置对话框 01056显示常用的Excel内置对话框 01057获取Excel菜单栏信息 01058获取Excel图表工具栏信息 01059获取Excel常用工具栏信息 01060获取Excel格式工具栏信息 01061获取Excel数据透视表工具栏信息 01062获取Excel的Web工具栏信息 01063获取Excel审阅工具栏信息 01064获取Excel窗体工具栏信息 01065获取Excel外部数据工具栏信息 01066获取Excel公式审核工具栏信息 01067获取Excel控件工具箱工具栏信息 01068获取Excel绘图工具栏信息 01069获取Excel命令按钮的外观图像和FaceID号(添加到自定义工具栏) 01070获取Excel命令按钮的外观图像和FaceID号(输出到工作表) 01071改变Excel命令按钮的外观图像 01072删除、恢复Excel菜单栏和工具栏 01073隐藏Excel菜单栏和工具栏 01074显示Excel默认的菜单栏和工具栏 01075执行菜单栏和工具栏的命令按钮 01076改变工作表单元格的快捷菜单 01077在工作表的任意位置快速显示快捷菜单 01078在单元格中输入公式 01079在单元格中输入数字 01080在单元格中输入文本 01081单元格区域引用 01082在单元格中输入数字和文本 01083为输入对话框设置默认值 01084在指定时间运行程序(之一) 01085在指定时间运行程序(之二) 01086计划在未来运行一定时间的宏 01087计划每隔一段时间运行宏 01088取消以前计划运行的宏 01089结束应用程序 02001通过索引指定工作簿 02002通过名称指定工作簿 02003引用当前的活动工作簿 02004引用最后打开的工作簿 02005引用当前宏代码运行的工作簿 02006引用新建的工作簿 02007引用包含特定工作表的工作簿 02008判断工作簿是否已经打开(之一) 02009判断工作簿是否已经打开(之二) 02010判断工作簿是否已经保存(之一) 02011判断工
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值