| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4252 人关注过本帖
标题:float and UINT转换问题
只看楼主 加入收藏
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:485
专家分:919
注 册:2012-10-26
收藏
得分:0 
回复 19楼 Juson
图片附件: 游客没有浏览图片的权限,请 登录注册


1.798174才是對的~後面少個4就不對了~

3F E6 2A 91 是我依照b值再去運算出來的結果~

[ 本帖最后由 yz1025 于 2013-4-11 19:57 编辑 ]

不要投我
2013-04-11 19:54
Juson
Rank: 4
等 级:业余侠客
帖 子:70
专家分:235
注 册:2013-4-8
收藏
得分:0 
回复 21楼 yz1025
我看了,在内存里面就是 3F E6 2A 91,你之前的一个截图里面也可以看到b的内存值啊
2013-04-11 20:02
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:485
专家分:919
注 册:2012-10-26
收藏
得分:0 
這問題先前部門內部有討論過~系統用VB6並依照IEEE754規範~
進行二進制處理後出來的值~和呼叫API等於VC6的處理就是不一樣~
程序代码:
TmpStrToDBL = CDbl(TmpStr)
LogNum = 10 ^ Log10(TmpStrToDBL)
IEEE32bit = sign * CSng(Mid(CStr(TmpStrToDBL / LogNum), 1, 9) * LogNum)

 
ptr1 = VarPtr(IEEE32bit)
ptr2 = VarPtr(tmpb(0))

 
CopyMemory ByVal ptr2, ByVal ptr1, 4
Debug.Print "new. " & tmpb(0) & " " & tmpb(1) & " " & tmpb(2) & " " & tmpb(3)

這次我直接全程用VC6處理~差異還是在~

不要投我
2013-04-11 20:04
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:485
专家分:919
注 册:2012-10-26
收藏
得分:0 
回复 22楼 Juson
所以我之前有问过怎么直接把内存的3F E6 2A 91撷取出来~这样我就不用手动转换了~

不过直接看内存资料~同一个值1.798174~
原始是3F E6 2A 90 (这我第一篇就写了)
变成是3F E6 2A 91
连内存资料都不同就已无力回天了~

不要投我
2013-04-11 20:11
Juson
Rank: 4
等 级:业余侠客
帖 子:70
专家分:235
注 册:2013-4-8
收藏
得分:0 
没学过vb,不知道你们这段代码要怎样数据
收到的鲜花
  • yz10252013-04-11 20:21 送鲜花  10朵   附言:写这么多才给20分~多少补贴一点~
2013-04-11 20:13
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:485
专家分:919
注 册:2012-10-26
收藏
得分:0 
想开一点只要确认不是我程式造成的误差问题~
就没我的事了~只是纠结~郁闷~
STDF<->ATDF两个档案互转程序今天完成了~

不要投我
2013-04-11 20:15
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:485
专家分:919
注 册:2012-10-26
收藏
得分:0 
以下是引用Juson在2013-4-11 20:13:31的发言:

没学过vb,不知道你们这段代码要怎样数据


这段是在VB6中呼叫API处理符点数的程序~速度快~
原本是一步一脚印的用字节阵列以二进位方式算的~
程序相较之下有点长~所以没贴上~速度慢~差距将进30倍~
但是用API(VC6)会和系统有误差~所以就搁置了~

不要投我
2013-04-11 20:19
yz1025
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:485
专家分:919
注 册:2012-10-26
收藏
得分:0 
以下是引用yz1025在2013-4-11 20:15:11的发言:

想开一点只要确认不是我程式造成的误差问题~
就没我的事了~只是纠结~郁闷~
STDF<->ATDF两个档案互转程序今天完成了~


底层算是完成一半吧~再来就是要建模了~底层完成后~
就要开始设计使用者介面~程式流程控制~后段的资料分析运算~

不要投我
2013-04-11 20:28
Juson
Rank: 4
等 级:业余侠客
帖 子:70
专家分:235
注 册:2013-4-8
收藏
得分:0 
以下是引用yz1025在2013-4-11 20:11:25的发言:

所以我之前有问过怎么直接把内存的3F E6 2A 91撷取出来~这样我就不用手动转换了~
 
不过直接看内存资料~同一个值1.798174~
原始是3F E6 2A 90 (这我第一篇就写了)
变成是3F E6 2A 91
连内存资料都不同就已无力回天了~
3F E6 2A 90 是 1.7981739....
3F E6 2A 91 是 1.7981740....
这两数保留6位小数后都是 1.798174
在你第一篇帖子的代码里,把 1072048784 传换成 float 后,内存还是 3F E6 2A 90
然后把字符串A  "1.798174"转成float后内存是 3F E6 2A 91
这两个内存值在保留6位小数输出时都是1.798174,这没什么错的啊
2013-04-11 20:32
Juson
Rank: 4
等 级:业余侠客
帖 子:70
专家分:235
注 册:2013-4-8
收藏
得分:0 
就这么结贴了啊,我还没搞明白你们对浮点数是经过了怎么样的处理才导致误差的出现呢
2013-04-11 20:50
快速回复:float and UINT转换问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017074 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved