主题:[讨论]紧急求助 关于浮点运算 在线等啊 求解决
我用VB写的一个关于单精度浮点的算法
已经4字节的16进制码 算出浮点数。
Function Float(a As Byte, b As Byte, c As Byte, d As Byte) As Double [color=FF0000]'浮点计算[/color]
Dim temp1 As String
Dim y, temp2, temp3 As Double
Dim i, e As Integer
If (a And &H80) = &H80 Then [color=FF0000]取首位判断正负[/color]
temp1 = "-"
Else: temp1 = ""
End If
e = ((a And &H7F) * &H2) + (b \ (&H2 ^ 7)) - 127 [color=FF0000]判断小数点位置[/color]
temp2 = (CLng((b Or &H80) * 65536) + c * 256 + d) \ (&H2 ^ (23 - e)) [color=FF0000]整数部分[/color] [color=FF00FF]有时候运行到这句直接跳出FUNCTION[/color]
y = (CLng((b Or &H80) * 65536) + c * 256 + d) Mod (&H2 ^ (23 - e)) [color=FF0000]小数部分16进制码[/color]
For i = 1 To (23 - e)
temp3 = temp3 + ((y Mod 2 ^ (23 - e + 1 - i)) \ 2 ^ (23 - e - i)) / 2 ^ i
Next i [color=FF0000]小数部分数值计算[/color]
Float = temp1 & (temp2 + temp3) [color=FF0000]合并[color=FF0000]
End Function
这是按照标准的浮点算法 用算术计算的代码
计算上基本正确 现在的问题是 有的时候 当运行到temp2 这句的时候 就直接跳出去
为什么 我很想不明白?请大家想想办法给点建议。
这用是算术方法算的 比较笨 如果 有好的方法 请指点。 谢谢[em10][em10][em10][em10][em10][em10][em10][em10][em10]
已经4字节的16进制码 算出浮点数。
Function Float(a As Byte, b As Byte, c As Byte, d As Byte) As Double [color=FF0000]'浮点计算[/color]
Dim temp1 As String
Dim y, temp2, temp3 As Double
Dim i, e As Integer
If (a And &H80) = &H80 Then [color=FF0000]取首位判断正负[/color]
temp1 = "-"
Else: temp1 = ""
End If
e = ((a And &H7F) * &H2) + (b \ (&H2 ^ 7)) - 127 [color=FF0000]判断小数点位置[/color]
temp2 = (CLng((b Or &H80) * 65536) + c * 256 + d) \ (&H2 ^ (23 - e)) [color=FF0000]整数部分[/color] [color=FF00FF]有时候运行到这句直接跳出FUNCTION[/color]
y = (CLng((b Or &H80) * 65536) + c * 256 + d) Mod (&H2 ^ (23 - e)) [color=FF0000]小数部分16进制码[/color]
For i = 1 To (23 - e)
temp3 = temp3 + ((y Mod 2 ^ (23 - e + 1 - i)) \ 2 ^ (23 - e - i)) / 2 ^ i
Next i [color=FF0000]小数部分数值计算[/color]
Float = temp1 & (temp2 + temp3) [color=FF0000]合并[color=FF0000]
End Function
这是按照标准的浮点算法 用算术计算的代码
计算上基本正确 现在的问题是 有的时候 当运行到temp2 这句的时候 就直接跳出去
为什么 我很想不明白?请大家想想办法给点建议。
这用是算术方法算的 比较笨 如果 有好的方法 请指点。 谢谢[em10][em10][em10][em10][em10][em10][em10][em10][em10]