VB6编程IEEE浮点算法实践

纯代码实现浮点计算实际上对浮点算法的再实践。IEEE浮点表示法是Modbus RTU协议至今还在用的传送编码,更是WITS 1记录标准的基础。以往实现 MKI、CVI,MKL、CVL,MKS、CVS,MKD、CVD在高级语言里封装了现成的语句,现在PowerBasic和FreeBasic也可以将这些语句封闭到 DLL 中供其它语言调用。不过还是重编代码,对算法的演练更到位。

1. MKI/CVI

要点:对输入数据取整,判断正负,正数直接转换,负数加上65536后转换。输入数据分成高低各16位数据,范围在 &H0000 - &HFFFF之间。

Function MKI(ByVal iData As Integer) As String'MKI 16bits &HFFFF -32768 to 32767 8000-7fffDim inData As LongDim HiByte As Long, LoByte As LonginData = Fix(iData)If inData < 0 Then inData = inData + 65536LoByte = inData And &HFFHiByte = (inData \ 2 ^ 8) And &HFFMKI = Right$(("0" + Hex$(HiByte)), 2) + Right$(("0" + Hex$(LoByte)), 2)
End Function

2. MKL/CVl

MKL实现方法与MKI类似,它是32位的,因此输入的数据分成四个8位数据,在VB6中用Currency类型变量表示更便于计算。

Function MKL(ByVal lData As Long) As StringDim Phi4 As Currency, Phi3 As Currency, Phi2 As Currency, Phi1 As CurrencyDim inData As CurrencyinData = Fix(lData)Phi4 = inData And &HFFPhi3 = (inData \ 2 ^ 8) And &HFFPhi2 = (inData \ 2 ^ 16) And &HFFPhi1 = (inData \ 2 ^ 24) And &HFFMKL = Right$(("0" + Hex$(Phi1)), 2) + Right$(("0" + Hex$(Phi2)), 2) + Right$(("0" + Hex$(Phi3)), 2) + Right$(("0" + Hex$(Phi4)), 2)
End Function

3. MKS/CVS

右移位求得整数部分二进制串,小数部分乘2取整形成小数二进制串,合并二进制串左移或右移小数点位置并舍去高位的 1 ,移位值加上127形成 exp 指数, 正负符号用0或1表示,结果是 s+exp+余下的小数。

    OffSetBits = 8AcuFactor = 32: OffSet = 127inData = sDatainDataSingn = 0If inData < 0 Then inDataSingn = 1inData = Abs(inData)    'ignore singnipart = Int(inData): fpart = (inData - ipart)If inData = 0 ThenCaseID = 0Else'Convert ipart, the integer part, into byte array TempData1 MSB to LSBtipart = ipart: TempString = ""For I = 1 To AcuFactorTempString = Right$(Str$(tipart And &H1), 1) + TempStringtipart = tipart \ 2 ^ 1Next IFor I = 1 To AcuFactorIf Mid$(TempString, I, 1) = "1" Then Exit ForMid$(TempString, I, 1) = " "Next IIntiStr = Trim(TempString)'Convert fpart, the fraction part, into byte array TempData2tfpart = fpart: TempString = ""For I = 1 To AcuFactorIf tfpart = 0 Then Exit Fortfpart = tfpart * 2tnpart = Int(tfpart): tfpart = tfpart - tnpartTempString = TempString + Right$(Str$(tnpart And &H1), 1)Next IFracStr = TempStringIf ipart > 0 Then CaseID = 1If ipart = 0 Then CaseID = 2End If

4. MKD/CVD

与MKS类同,只是exp由8位增加至11位,偏移值由127变为1023

    OffSetBits = 11AcuFactor = 64: OffSet = 1023inData = sDatainDataSingn = 0If inData < 0 Then inDataSingn = 1inData = Abs(inData)    'ignore singnipart = Int(inData): fpart = (inData - ipart)If inData = 0 ThenCaseID = 0Else'Convert ipart, the integer part, into byte array TempData1 MSB to LSBtipart = ipart: TempString = ""For I = 1 To AcuFactorTempString = Right$(Str$(tipart And &H1), 1) + TempStringtipart = tipart \ 2 ^ 1Next IFor I = 1 To AcuFactorIf Mid$(TempString, I, 1) = "1" Then Exit ForMid$(TempString, I, 1) = " "Next IIntiStr = Trim(TempString)'Convert fpart, the fraction part, into byte array TempData2tfpart = fpart: TempString = ""For I = 1 To AcuFactorIf tfpart = 0 Then Exit Fortfpart = tfpart * 2tnpart = Int(tfpart): tfpart = tfpart - tnpartTempString = TempString + Right$(Str$(tnpart And &H1), 1)Next IFracStr = TempStringIf ipart > 0 Then CaseID = 1If ipart = 0 Then CaseID = 2End If

最后的结果都要变成十六进制字符,以便传送和文件存储。

源代码下载:

https://download.csdn.net/download/weixin_45707491/88232263?spm=1001.2014.3001.5503

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/96347.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建和运行 Ansible 临时命令

创建和运行 Ansible 临时命令 作为系统管理员&#xff0c;您需要在受管节点上安装软件。 请按照正文所述&#xff0c;创建一个名为 /home/curtis/ansible/adhoc.sh 的 shell 脚本&#xff0c;该脚本将使用 Ansible 临时命令在各个受管节点上安装 yum 存储库&#xff1a; 存储库…

【C++】函数指针

2023年8月18日&#xff0c;周五上午 今天在B站看Qt教学视频的时候遇到了 目录 语法和typedef或using结合我的总结 语法 返回类型 (*指针变量名)(参数列表)以下是一些示例来说明如何声明不同类型的函数指针&#xff1a; 声明一个不接受任何参数且返回void的函数指针&#xf…

OJ练习第151题——克隆图

克隆图 力扣链接&#xff1a;133. 克隆图 题目描述 给你无向 连通 图中一个节点的引用&#xff0c;请你返回该图的 深拷贝&#xff08;克隆&#xff09;。 示例 分析 对于一张图而言&#xff0c;它的深拷贝即构建一张与原图结构&#xff0c;值均一样的图&#xff0c;但是…

POSTGRESQL 关于安装中自动启动的问题 详解

开头还是介绍一下群&#xff0c;如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis &#xff0c;SQL SERVER ,ORACLE,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加 liuaustin3微信号 &…

Python “贪吃蛇”游戏,在不断改进中学习pygame编程

目录 前言 改进过程一 增加提示信息 原版帮助摘要 pygame.draw pygame.font class Rect class Surface 改进过程二 增加显示得分 改进过程三 增加背景景乐 增加提示音效 音乐切换 静音切换 mixer.music.play 注意事项 原版帮助摘要 pygame.mixer pygame.mix…

代码随想录算法训练营第三十八天 | 理论基础,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

代码随想录算法训练营第三十八天 | 理论基础&#xff0c;509. 斐波那契数&#xff0c;70. 爬楼梯&#xff0c;746. 使用最小花费爬楼梯 理论基础什么是动态规划动态规划的解题步骤动态规划应该如何debug 509. 斐波那契数递归解法 70. 爬楼梯746. 使用最小花费爬楼梯 理论基础 视…

微信小程序:函数节流与函数防抖

目录 问题引入&#xff1a; 定义 解决方案&#xff1a;函数节流 一、案例举例 1.页面展示 2.search.wxml标签展示 3.search.js展示 4.结果展示 二、函数节流解决问题 1.函数 2.实例应用 三、函数防抖解决问题 1.函数 2.原理 3.应用场景 4.应用实例 总结 问题引入…

Python3的print用法

目录 一&#xff1a;print语法 二&#xff1a;print结尾参数end用法 三&#xff1a;print分隔符参数sep用法 四&#xff1a;print固定宽度字符输出 一&#xff1a;print语法 print(*objects, sep , end\n, filesys.stdout, flushFalse) 参数解释&#xff1a; &q…

【计算机设计大赛】国赛一等奖项目分享——基于多端融合的化工安全生产监管可视化系统

文章目录 一、计算机设计大赛国赛一等奖二、项目背景三、项目简介四、系统架构五、系统功能结构六、项目特色&#xff08;1&#xff09;多端融合&#xff08;2&#xff09;数据可视化&#xff08;3&#xff09;计算机视觉&#xff08;目标检测&#xff09; 七、系统界面设计&am…

虹科展会 | 自动驾驶展品:上海汽车测试展精彩回顾

2023年8月9日-8月11日&#xff0c;上海国际汽车测试及质量监控博览会在上海圆满落幕。本次展会提供了一个了解最新汽车测试及质量监控技术、产品和趋势的机会&#xff0c;同时也是汽车测试及质量监控领域的专业人士和业内人士的重要交流平台。 雅名特是虹科旗下子公司&#xff…

springcloud3 hystrix实现服务熔断的案例配置3

一 hystrix的熔断原理 1.1 hystrix的熔断原理 在springcloud的框架里&#xff0c;熔断机制是通过hystrix实现&#xff0c;hystrix会监控服务之间的调用。当失败调用达到一定的阈值&#xff0c;默认是5s内失败20次&#xff0c;就会启用hystrix的熔断机制&#xff0c;使用命Hy…

Python Opencv实践 - 图像透射变换

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) rows,cols img.shape[:2] print(rows,cols)#opencv中的透射变换&#xff0c;需要一个3x3透射变换矩阵 #这个矩阵可以通过…

内核配置知识

Linux内核配置系统的组成 Linux内核源码很多&#xff0c;有上千条配置选项&#xff0c;配置相当复杂。 为了更好选择自己想要的功能配置&#xff0c;linux内核源码组织了一个配置系统&#xff1b; 配置系统包括三部分&#xff1a; Makefile&#xff1a;负责整体的配置编译 …

0101读写分离测试-jdbc-shardingsphere-中间件

文章目录 1 前言2、创建SpringBoot程序2.1、创建项目2.2、添加依赖2.3、生成实体类、service与Mapper1.5、配置读写分离 2、测试2.1、读写分离测试2.2、事务测试2.3、负载均衡测试 结语 1 前言 shardingshpere-jdbc定位为轻量级 Java 框架&#xff0c;在 Java 的 JDBC 层提供的…

【python办公自动化】PysimpleGUI中更新Listbox组件选定元素的格式

pysimplegui中更新Listbox组件选定元素的格式 背景问题解决创建窗口布局创建窗口背景 在进行打分时候,由于打分的指标较多,因此为了辨别已经打完分数的指标,可以考虑对打过分的指标进行标记,故可以采用格式修改的方法调整,比如添加一些特殊标记 问题解决 import PySim…

自动驾驶数据集汇总

1.Nuscenes 数据集链接&#xff1a;nuScenes nuscenes数据集下有多个任务&#xff0c;涉及Detection&#xff08;2D/3D&#xff09;、Tracking、prediction、激光雷达分割、全景任务、规划控制等多个任务&#xff1b; nuScenes数据集是一个具有三维目标注释的大型自动驾驶数…

C语言中常见的一些语法概念和功能

常用代码&#xff1a; 程序入口&#xff1a;int main() 函数用于定义程序的入口点。 输出&#xff1a;使用 printf() 函数可以在控制台打印输出。 输入&#xff1a;使用 scanf() 函数可以接收用户的输入。 条件判断&#xff1a;使用 if-else 语句可以根据条件执行不同的代码…

中期国际:MT4挂单和止损设置教程:善用限价和止损单来管理风险

在外汇交易中&#xff0c;合理设置挂单和止损是保护资金和管理风险的重要手段。MT4平台提供了便捷的挂单和止损功能&#xff0c;帮助交易者更好地控制交易风险。本文将为您介绍如何善用限价和止损单来管理风险&#xff0c;以及在MT4平台上的操作步骤。 一、设置限价挂单 限价挂…

⛳ Docker - Centos 安装配置

目录 ⛳ Docker - Centos 安装配置&#x1f3ed; Docker 安装&#xff1a;&#x1f4e2; 一、安装依赖包&#x1f4ac; 二、添加 Docker 下载源地址&#x1f43e; 三、更新yum缓存&#x1f463; 四、安装Docker&#x1f4bb; 五、启动Docker&#x1f381; 六、查看Docker状态和…

macOS - 安装使用 libvirt、virsh

文章目录 关于 libvirt使用安装启动服务virsh 交互模式virsh 帮助命令 关于 libvirt libvirt 官网&#xff1a; https://libvirt.org/gitlab : https://gitlab.com/libvirt/libvirtgithub : https://github.com/libvirt/libvirt 只读&#xff0c;gitlab 的镜像 libvirt是一套…