- 下午被一个网友教育了一顿,教育内容如下:
- struct mapinfo
- {
- union{
- int maptypearry[13*13];
- int maptype[13][13];
- char maptype4[4][13][13];
- }
- ...
- }
- 这是一个很普通的保存2d地图网格信息的结构体,本来他只保存一层地图信息:int maptype[13][13];在我的要求下加到了四层:char maptype4[4][13][13];
- 我问他为啥要用union,被告知union中的数据指向同一个内存地址。也就是说int maptypearry[13*13]和int maptype[13][13];指向的内存地址是同一个。
- int maptypearry[13*13]是用来使内存地址连续不中断的,int maptype[13][13]方便索引。
- union还可以用来做快速开方(卡马克创造)
- float CarmSqrt(float x){
- union{
- int intPart;
- float floatPart;
- } convertor;
- union{
- int intPart;
- float floatPart;
- } convertor2;
- convertor.floatPart = x;
- convertor2.floatPart = x;
- convertor.intPart = 0x1FBCF800 + (convertor.intPart >> 1);//不要问我这个数从哪里来,我也不知道。当初老师教我们徒手开平方的时候我在走神
- convertor2.intPart = 0x5f3759df - (convertor2.intPart >> 1);
- return 0.5f*(convertor.floatPart + (x * convertor2.floatPart));
- }
- 快速开平方还有其他方法:
- 人在山边 16:10:35
- 查表法 。。。
- 人在山边 16:10:44
- 自己构建 一张表。。
- 人在山边 16:10:53
- 用offset去查
- corivSky 16:11:22
- 哈哈!~
- 人在山边 16:11:31
- 而且表要是 16进制的
- 人在山边 16:11:45
- 这样 做offset的时候 用 位移动
- 人在山边 16:11:48
- >> <<
- 人在山边 16:11:51
- 就可以了
- 人在山边 16:11:58
-
- 人在山边 16:12:26
- 这样 sin cos sqrt cube
- 人在山边 16:12:30
- 之类的就很快了。。
- 人在山边 16:12:44
- 用户内存大 放两张表也很随意的
- 人在山边 16:12:55
- 再用 winapi把表锁在内存里
- 人在山边 16:12:59
-
- 人在山边 16:13:12
- 很黄很暴力
union的作用
最新推荐文章于 2024-07-10 07:09:19 发布