My Pool Help, I can't swimming……

19Jan/100

Domain Change

因为一些众所周知的原因,我决定要放弃我的.cn的域名了,所以我的域名正式更改:

www.mypool.cn ======>>>>  www.hlouis.com

如果有人订阅过我的blog,请将订阅地址更新为:

http://www.hlouis.com/feed/

目前我的cn域名会持续到今年8月份到期,(当然,也可能在中途的任意时刻被停止解析)这段时间内这两个域名会同时指向我现在的网站,所以理论上会有很长的一段过渡时期。。。。。

Filed under: Diary No Comments
17Sep/091

Lua can’t do math?

今天把项目中所有使用的脚本从python替换到lua,一切看起来很美,不过最后测试的时候发现一个非常诡异的问题,具体lua语句如下:

print("simple test: ")
print((10000 + 123456789) - 123456789)

程序打印出来的值竟然是10003,顿时被雷到了。虽然我知道lua用的是double作为基础的lua_number,但是人家已经很耐心的教育我们double是双精度类型,不会出现什么四舍五入的问题。于是打开linux上的终端运行lua进行同样的计算,这次得到的是正确的结果:10000。

想想也知道lua不会有这种低级的错误的,要不还不立刻被人骂死,于是开始找自己的问题,首先怀疑是我们的lua嵌入包裹代码的问题,仔细review了一遍代码,觉得不会影响到这么底层的问题。接着开始做实验,发现在服务器上的同样lua代码,运行的结果是正确的。经过无尽的折腾,最后发现了这么一个事实:

在directX的sdk文档里面,D3DCREATE这个条目里面有这么一条:

D3DCREATE_FPU_PRESERVE Set the precision for Direct3D floating-point calculations to the precision used by the calling thread. If you do not specify this flag, Direct3D defaults to single-precision round-to-nearest mode for two reasons:
- Double-precision mode will reduce Direct3D performance.
- Portions of Direct3D assume floating-point unit exceptions are masked; unmasking these exceptions may result in undefined behavior

D3D默认在创建设备的时候,会把双精度改成单精度,增加渲染的效率,所以lua也被殃及了,这也算是蝴蝶效应的一个体现吧。。。。。

恶心的问题只要原因找到了解决总是相对容易的,现在有两个方案:

  1. 将lua_number定义为int,缺点是lua内就不能使用小数
  2. 在D3D初始化的时候添加参数,让他不要改变计算精度,缺点是不知道对性能有多大影响
Filed under: Develop 1 Comment
30Aug/090

Get rid of memory bugs

大型的C/C++程序做到最后,bug高发的时期过去之后,一般来说会出现的问题都是很妖的。最最常见的现象就是一下几种:

  1. 调用栈全部混乱,一堆问号出现在这里,你明明知道自己编译的时候有放入符号,现在却什么信息都看不到
  2. 莫名其妙的调用了一个代码里面没有调用的函数
  3. 重复的free或者delete某块内存,然后崩溃
  4. 部分静态或者全局的数据混乱了,代码里面除了初始化就没啥地方写过他们了
  5. 莫名的某个对象的数据全部混乱了
Filed under: Develop Continue reading
9Jan/090

Test Live writer 2009

同事帮我画的两张卡通头像,谢谢gary同学~

head1_by_gary head2_by_gary

Filed under: Diary No Comments