zx1221 发表于 2007-3-21 11:44:31

请教一极难浮点转换数值问题!包括浮点运算方法!(请教论坛各高手)

现在程序需要将一个数值转换为32位浮点算法的16进制数据!比如一个数z,转换为浮点的方法为z=(-+)1*2**(x-127)*1.(y),其中**代表指数。需要的就是-+,x,y的值转换为32位的2进制!举例说明吧!将11.922转换为32位的浮点数:
11.922=+1*2**(3)*1.49025=+1*2**(130-127)*1.(49025)其中需要的就是+1,130,0.49025这3个数值转换为32位2进制,32位2进制数分成3组:0,12345678,123456789……23。0代表数值的正负(二进制0为+,1为-),12345678代表130的二进制位10000010,123456789……23代表23位二进制,首位为2**(-1),接着2**(-2),2**(-3),……2**(-23),23位数相加得到最接近0.49025的小数,即:0111,1101,1000,0001,0000,011=0.4902499914
11.922转换为32位浮点数就是
11.922=8*1.49025=2**(3)*1.49025=2**(130-127)*1.(49025)=0,10000010,0111,1101,1000,0001,0000,011=413EC083(hex)
再如-0.0046
-0.0046=2(-8)*1.1776=2**(119-127)*1.(1776)='1,01110111,0010,1101,0111,0111,0000,000=BB96BB80(hex)

现在想用labview实现这样的运算将11.922转换为0,10000010,0111,1101,1000,0001,0000,011再转换为16进制413EC083!想好久都不知道如何下手!不知道labview能否实现哪?

看到labview数值函数里有个按2的幂缩放这个函数,不知有没有反过来的运算?

[ 本帖最后由 zx1221 于 2007-3-21 11:51 编辑 ]

zx1221 发表于 2007-3-21 14:08:39

大家有什么思路都可以说下啊!我真的无办法了!在labview里逛了半天都没找到第一步分解的方法!就是按2的幂缩放这个函数,不知有没有反过来的运算?

zx1221 发表于 2007-3-23 10:09:37

labview还是很强的这种拆分的东西都有!尾数与指数,Mantissa & Exponent !可以拆分位z=1.x*2^y!不过还有个难题就是如何得到一个2进制数值的长度!以补齐32位!
http://www.cpubbs.com/bbs/viewthread.php?tid=19792&extra=page%3D1

飞雨天 发表于 2007-3-23 10:51:01

:L 发现对你这个问题还有如下更简单的解决方案~~

zx1221 发表于 2007-3-23 11:34:18

我靠labview太强了我还自己搞了2天才画出来!

[ 本帖最后由 zx1221 于 2007-3-23 11:36 编辑 ]

wdyjz 发表于 2007-3-23 11:39:52

原帖由 飞雨天 于 2007-3-23 10:51 发表
:L 发现对你这个问题还有如下更简单的解决方案~~
所用节点在tcp通信上的tcp write上非常有用.
flatten to string.
不用什么都从底层做,只要能懂原理和使用方法就可以了,充分利用已经有的资源.

飞雨天 发表于 2007-3-23 11:45:02

回复 #6 wdyjz 的帖子

嘿~~~就是这个道理,最近在看win32汇编,感觉对写其他程序比如labview也很有帮助

zx1221 发表于 2007-3-23 11:48:02

呵呵cpubbs真是好论坛啊!能从各位高手那学到非常多东西!是我见到的最好的labview论坛!比NI的论坛效率还高!

wdyjz 发表于 2010-11-25 20:50:46

http://www.cpubbs.com/bbs/thread-143647-1-1.html
这个是用type cast做的;

wdyjz 发表于 2026-5-28 19:56:50

在 LabVIEW 中将四字节(32 位)数据转换为单精度浮点数(SGL),核心方法是使用“类型转换”(Type Cast)函数,确保输入为 U32 且输出设为 SGL(单精度浮点数),按 IEEE 754 标准解释字节。

- 若输入是 十六进制字符串(如 `"40490FDB"`):先用 “十六进制字符串至数值” 转为 U32,再用 “类型转换”(右键设输出为 SGL)得浮点数。
- 若输入是 字节数组(如从串口收到的 4 字节):可直接 “类型转换”(输入接 U8 数组,输出设为 SGL),但需注意字节序(大端/小端);若结果异常,插入 “交换字节” 函数(编程 → 数值 → 数据操作)。
- LabVIEW 的 “类型转换” 不进行数值缩放,而是按二进制位强制 reinterpret,等效于 C 语言的 `*(float*)&u32_value`。
- 确保四字节内容符合 IEEE 754 单精度格式,否则可能输出 `NaN`、`Inf` 或无意义值。

无需手动解析符号/指数/尾数,LabVIEW 自动按 IEEE 754 处理。若处理通信数据(如 Modbus),常需先拼接字节、判断字节序,再 Type Cast。
页: [1]
查看完整版本: 请教一极难浮点转换数值问题!包括浮点运算方法!(请教论坛各高手)