[閒聊] 老遊戲的變態程式碼
https://en.wikipedia.org/wiki/Fast_inverse_square_root
1999年製作的一款遊戲:Quake III Arena
在遊戲開發者之間,這款遊戲的程式碼成為了熱門話題
因為下面這個求1/√x的程式碼實在太變態了而讓大家頗為驚訝
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit
level hacking
i = 0x5f3759df - ( i >> 1 ); // what the fuck?
y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can
be removed
return y;
}
影片中有解說這個程式碼在幹什麼
簡單來說就是用好計算的加減乘除來取代複雜的求平方根的過程
因為現代電腦計算速度夠快,直接叫電腦求平方根也可以
但這款遊戲是1999年出的,求平方根這件事情是為了計算光影的強度
因為會影響到光影的計算速度,就算有一點誤差也希望可以大幅提速
畢竟就算有誤差,1%的明亮度差異應該大多數的人不會在意,所以速度比較重要
具體做了什麼可以參考影片內容
這個程式碼似乎是由某位數學教授想出來的
然後這個遊戲的製作人把數學教授的想法拿來活用的結果
各位有看過這種變態程式碼嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.64.25.104 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1753173942.A.9A6.html
→
07/22 16:47,
5小時前
, 1F
07/22 16:47, 1F
→
07/22 16:48,
5小時前
, 2F
07/22 16:48, 2F
→
07/22 16:48,
5小時前
, 3F
07/22 16:48, 3F
→
07/22 16:49,
5小時前
, 4F
07/22 16:49, 4F
→
07/22 16:49,
5小時前
, 5F
07/22 16:49, 5F
推
07/22 16:49,
5小時前
, 6F
07/22 16:49, 6F
→
07/22 16:51,
5小時前
, 7F
07/22 16:51, 7F
推
07/22 16:51,
5小時前
, 8F
07/22 16:51, 8F
→
07/22 16:51,
5小時前
, 9F
07/22 16:51, 9F
→
07/22 16:51,
5小時前
, 10F
07/22 16:51, 10F
→
07/22 16:53,
5小時前
, 11F
07/22 16:53, 11F
→
07/22 16:53,
5小時前
, 12F
07/22 16:53, 12F
→
07/22 16:53,
5小時前
, 13F
07/22 16:53, 13F
→
07/22 16:54,
5小時前
, 14F
07/22 16:54, 14F
推
07/22 16:54,
5小時前
, 15F
07/22 16:54, 15F
推
07/22 16:55,
5小時前
, 16F
07/22 16:55, 16F
推
07/22 16:55,
5小時前
, 17F
07/22 16:55, 17F
推
07/22 16:56,
5小時前
, 18F
07/22 16:56, 18F
→
07/22 16:56,
5小時前
, 19F
07/22 16:56, 19F
→
07/22 16:59,
5小時前
, 20F
07/22 16:59, 20F
推
07/22 17:00,
5小時前
, 21F
07/22 17:00, 21F
→
07/22 17:00,
5小時前
, 22F
07/22 17:00, 22F
推
07/22 17:03,
5小時前
, 23F
07/22 17:03, 23F
→
07/22 17:04,
5小時前
, 24F
07/22 17:04, 24F
推
07/22 17:05,
5小時前
, 25F
07/22 17:05, 25F
推
07/22 17:12,
5小時前
, 26F
07/22 17:12, 26F
推
07/22 17:12,
5小時前
, 27F
07/22 17:12, 27F
推
07/22 17:16,
5小時前
, 28F
07/22 17:16, 28F
→
07/22 17:16,
5小時前
, 29F
07/22 17:16, 29F
→
07/22 17:16,
5小時前
, 30F
07/22 17:16, 30F
推
07/22 17:17,
5小時前
, 31F
07/22 17:17, 31F
→
07/22 17:17,
5小時前
, 32F
07/22 17:17, 32F
→
07/22 17:18,
5小時前
, 33F
07/22 17:18, 33F
→
07/22 17:18,
5小時前
, 34F
07/22 17:18, 34F
→
07/22 17:21,
5小時前
, 35F
07/22 17:21, 35F
推
07/22 17:40,
4小時前
, 36F
07/22 17:40, 36F
推
07/22 17:40,
4小時前
, 37F
07/22 17:40, 37F
→
07/22 17:41,
4小時前
, 38F
07/22 17:41, 38F
推
07/22 17:41,
4小時前
, 39F
07/22 17:41, 39F
推
07/22 17:42,
4小時前
, 40F
07/22 17:42, 40F
→
07/22 17:42,
4小時前
, 41F
07/22 17:42, 41F
推
07/22 17:42,
4小時前
, 42F
07/22 17:42, 42F
→
07/22 17:42,
4小時前
, 43F
07/22 17:42, 43F
推
07/22 17:45,
4小時前
, 44F
07/22 17:45, 44F
推
07/22 17:47,
4小時前
, 45F
07/22 17:47, 45F
→
07/22 17:48,
4小時前
, 46F
07/22 17:48, 46F
推
07/22 17:48,
4小時前
, 47F
07/22 17:48, 47F
推
07/22 17:53,
4小時前
, 48F
07/22 17:53, 48F
推
07/22 17:54,
4小時前
, 49F
07/22 17:54, 49F
推
07/22 17:59,
4小時前
, 50F
07/22 17:59, 50F
→
07/22 18:01,
4小時前
, 51F
07/22 18:01, 51F
推
07/22 18:05,
4小時前
, 52F
07/22 18:05, 52F
→
07/22 18:05,
4小時前
, 53F
07/22 18:05, 53F
推
07/22 18:18,
4小時前
, 54F
07/22 18:18, 54F
→
07/22 18:19,
4小時前
, 55F
07/22 18:19, 55F
→
07/22 18:19,
4小時前
, 56F
07/22 18:19, 56F
推
07/22 18:21,
4小時前
, 57F
07/22 18:21, 57F
→
07/22 18:21,
4小時前
, 58F
07/22 18:21, 58F
推
07/22 18:27,
4小時前
, 59F
07/22 18:27, 59F
→
07/22 18:27,
4小時前
, 60F
07/22 18:27, 60F
推
07/22 18:30,
3小時前
, 61F
07/22 18:30, 61F
推
07/22 18:31,
3小時前
, 62F
07/22 18:31, 62F
推
07/22 18:33,
3小時前
, 63F
07/22 18:33, 63F
→
07/22 18:42,
3小時前
, 64F
07/22 18:42, 64F
→
07/22 18:42,
3小時前
, 65F
07/22 18:42, 65F
推
07/22 19:51,
2小時前
, 66F
07/22 19:51, 66F
推
07/22 20:01,
2小時前
, 67F
07/22 20:01, 67F
推
07/22 21:36,
53分鐘前
, 68F
07/22 21:36, 68F
討論串 (同標題文章)
C_Chat 近期熱門文章
PTT動漫區 即時熱門文章
9
37