找回密码
 点一下
查看: 4098|回复: 6

验证jass中的real类型的有效位.

[复制链接]
发表于 2007-12-18 21:30:22 | 显示全部楼层 |阅读模式
[codes=jass]
function Equal takes real a,real b return boolean
        return   256*256*256*a==256*256*256*b
endfunciton

function test takes nothing returns nothing
     loca integer index=0
     local real num=1.0

    loop
             exitwhen   Equesl(1+num,1+num/2)

             set index=index+1
             set num=num/2
    endloop
    call BJDebugMsg(index)
endfucntion
[/codes]

结果是23位有效数字,1位符号位,8位指数位.

那个Equa函数,我这样写,是因为如下事实:
0.0001==0.00011
就是说,jass认为小数点后3位前,都一样的话,两个实数是相等的.

评分

参与人数 1威望 +10 收起 理由
eff + 10 研究性文章

查看全部评分

发表于 2007-12-22 22:57:25 | 显示全部楼层
我是这么算的。
local real a = 1.00
local real i = 2.00
local integer n = 0
loop
set i = i *2
set n = n + 1
if(a/i<=0)then
.....n..
endif
endloop
回复

使用道具 举报

发表于 2007-12-22 22:57:40 | 显示全部楼层
算出来是15.
回复

使用道具 举报

发表于 2007-12-22 23:19:30 | 显示全部楼层
结果是23位有效数字,1位符号位,8位指数位.

ics课刚上到浮点,貌似就是这样的额………………

跑题了,飘走………………
回复

使用道具 举报

 楼主| 发表于 2007-12-23 02:31:06 | 显示全部楼层
引用第2楼eff于2007-12-22 22:57发表的  :
算出来是15.
那你认为 1/(2^15) 的有效位是多少位呢?
我觉得,这个数的有效位仅有1位而己.

就比如 1,2,4,8,都是1位有效位,而3,5,6,9,10是2位有效位,7是3位有效位.
回复

使用道具 举报

发表于 2007-12-23 03:09:33 | 显示全部楼层
这个,很容易就能验证real就素ieee单精度浮点数,比如写个i2r~
回复

使用道具 举报

发表于 2007-12-25 21:19:24 | 显示全部楼层
计算机算a/2的结果很精确的好吧。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-22 03:14 , Processed in 0.149909 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表