
前面讲 sqrt 的时候我说过一句,定点世界里 sin、cos 得自己造。今天就把三角函数这块讲透。结论先撂在标题上——别想着实时算,查表。很多人第一反应是,不就是 sin 吗,泰勒展开几项不就出来了。真到定点里这么干,你会发现要么精度崩,要么溢出,要么慢得离谱,而且最要命的是——不同平台算出来还可能不一样。绕了一大圈,最后还是得回到查表。这篇讲清楚为什么查表是唯一正解,以及大厂的表是怎么建、怎么查的。为什么不能实时算先把"实时算"这条路堵死,你才会心甘情愿去查表。泰勒展开算 sin,长这样:sin(x) = x - x³/6 + x⁵/120 - x⁷/5040 + ...看着挺美,放进定点里全是雷。第一个雷,溢出。上一篇刚讲过,定点乘法中间值会暴涨。这里要算 x 的三次方、五次方、七次方,x 连乘好几次,中间结果直接顶穿。你得每一步小心翼翼地右移收缩,代码写得跟拆弹一样。第二个雷,精度。那些系数 1/6、1/120、1/5040,在定点里都是除不尽的小数,存进去就带舍入误差。展开项越多,误差累积越厉害。你想提精度就得多加几项,多加几项又加重溢出和累积误差,左右不是人。第三个雷,也是最致命的,慢。为了保证精度,一个 sin 你得算七八项,每项好几次乘法和移位。FPS 里一帧要算成百上千次三角函数——每个子弹方向、每次后坐力偏移、每个角色朝向。这么算下去,CPU 直接跪了。而查表,一次内存读取加一次插值,几条指令的事。精度还稳定可控,建表的时候误差就锁死了,运行时不会再累积。这笔账怎么算都