游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1089|回复: 1

一个函数,在其它工程中可以正确运行,但在当前的工程

[复制链接]

13

主题

113

帖子

123

积分

注册会员

Rank: 2

积分
123
QQ
发表于 2006-4-11 01:41:00 | 显示全部楼层 |阅读模式
函数如下:

#define  magic 6755399441055744.0

inline int RoundToInt64 (double dval)
{
    dval += magic;
    return *(int*)&dval;
}

该函数用于将64位的IEEE浮点数四舍五入并转换为32位整数(具体可见:http://bbs.gameres.com/showthread.asp?threadid=49632)

这个函数我曾经用一大堆数据测试过,并且在多个Project中都有使用,运行良好,但在我最近的一个Project中却出现了问题:如果传入一个和magic不是同一个数量级的小数(例如:8.75,22.22之类),就直接返回0了。

我查看过汇编代码,并没发现有什么问题。然后我跟踪内存中的数据,结果发现,dval+=magic后,dval就直接等于magic了。我通过整数指针直接对dval的低32位设值,但相加后低32位的数据居然全部清零了。

我实在不知道是怎么回事。我曾经怀疑是Project的编译属性的设置问题,但我反复检查,并和以前的Project(该函数在上面运行良好)的属性设置进行对比,并没发现有什么可疑的选项。我用的是VC2003

请大家帮帮忙,谢谢!

13

主题

113

帖子

123

积分

注册会员

Rank: 2

积分
123
QQ
 楼主| 发表于 2006-4-18 19:45:00 | 显示全部楼层

Re:一个函数,在其它工程中可以正确运行,但在当前的工

还是没有能够发现问题的所在。仔细对比了几乎所有的编译选项,还尝试改了其中几个,还是不行。

实在有点诡异~~b
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 05:28

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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