没有显卡的年代,这群程序员用4行代码优化游戏

แชร์
ฝัง

ความคิดเห็น • 316

  • @VO-S
    @VO-S 4 หลายเดือนก่อน +298

    英偉達 : 讓程序員不用專注優化
    程序員 : 賊爛的優化讓顯卡大賣
    = 雙贏

    • @fredd12356
      @fredd12356 4 หลายเดือนก่อน +11

      这是yi种循环,已经进行了二十多年😥

    • @user-bj9yk4mi3z
      @user-bj9yk4mi3z 2 หลายเดือนก่อน +11

      主要是 程序員優化太消耗程序員了

    • @jiangzhao1142
      @jiangzhao1142 หลายเดือนก่อน

      @@user-bj9yk4mi3z 对于公司来说,真正好的程序员过于稀有,物以稀为贵,花费的成本太高还不一定找得到,不如这钱花在硬件上省成本。

    • @user-kb3fu2bh2g
      @user-kb3fu2bh2g หลายเดือนก่อน

      英伟达是懂垄断的,可惜美国人也懂拆分。

    • @GreatForest-mh7sl
      @GreatForest-mh7sl 19 วันที่ผ่านมา

      給多少錢 幹多少活,都是為老闆做工,不要太有責任心了

  • @xiao2009
    @xiao2009 4 หลายเดือนก่อน +130

    身為程式設計師,真的想說一下
    能不能讓程式跑得快,很大程度要看程式設計師願不願意花心力
    願意花心力解決效能瓶頸的話使用者會非常舒服
    最常見的三種例子
    一個就是各種數學運算
    可以只運算一次絕不運算兩次
    可以直接對二進位操作絕不做運算
    二是迴圈
    能用多重迴圈絕不用遞迴
    能用單迴圈就絕不用多重迴圈
    三是特殊模型
    能用現有的演算法就絕不自己手刻!
    甚至見過用大量二進位操作來取代計算的
    那效能真的是快到一個升天

    • @user-hk4pz2of6k
      @user-hk4pz2of6k 4 หลายเดือนก่อน +2

      二進位操作不就是運算嗎
      運算裡面比較花時間的應該就除法跟求餘數吧

    • @xiao2009
      @xiao2009 4 หลายเดือนก่อน

      @@user-hk4pz2of6k 廣義上來說
      要把二進位操作當作運算也不能說不對
      不然結果就不會一致了
      但從二進位執行操作 它的本義並不是為了數學運算
      就算你今天不是為了要進行運算也可以做這動作
      比方說一些破壞性攻擊或加密也會利用這件事
      但它就不屬於數學上的運算行為
      這裡特意將「二進位操作」與「二進制運算」區分開來
      用比較狹義的方式界定
      否則這個行為就無法在這之間做出區隔了

    • @danielx8765
      @danielx8765 4 หลายเดือนก่อน +157

      以前留學的時候,雖然主修不是CS,也不幹這行,但我當時突然想瞭解電腦運作,程序是做什麽的,所以就順便修了一下CS的major。因爲其實我一直想寫自己的游戲。因爲我很喜歡游戲。
      我其實修之前就已經稍微看了一下什麽C++那種書了,很多基本的寫法知道。
      也簡單的寫了一個戰棋2D游戲,很粗糙很粗糙,我就是要看看是不是能寫出類似三國志曹操傳那種最基本的東西,那時候我知道演算法的重要性,像是path finding大大的影響速度跟特性之類的。爲了這個也買了演算法的書認真看。
      這都是我課外讀物無聊的時候自己找時間看的,
      想說應該可以了,
      因爲我主是主修商學院的,課業壓力真的當時很累,每個禮拜都要看很多書來寫報告作業。
      我英文閲讀速度當時也不快所以一個禮拜看一堆書又要寫報告趕作業,又要復習考試不然就fail實在很怕,所以我是課外時間稍微看了C++,Java,資料結構,演算法,這些書本的基本都看完後,才去額外的修1年級CS,想說我看的這些書跟他們課堂介紹說要教的東西内容範圍差不多。
      課堂上當然會教更多,但我應該不至於被當掉這些CS課吧?
      是沒有被當掉,但我的媽,這些白人年輕人程序員根本就是滿街天才等級的神。
      其中有一堂課是寫3D光影反射的代碼,那時候教授要大家比賽看誰計算速度最快。
      我非常努力努力的優化了,大概最後就是班上平均值高一點的速度而已。
      那時候就是在刷新作業成績的速度,有人上傳就有新速度成績。
      結果有一個看起來很不認真的白人學生居然快好幾倍,然後那時候我就嚇死了,課業結算完成績後我馬上去請教他到底用了什麽算法,那時候也一堆趕興趣的同學去問了。
      結果看了代碼真的尿褲子,這到底什麽鬼!
      之後我常常跟那些比較天才等級的同學交朋友,討論問題,他們也有玩游戲。
      我們功課考試是都沒有什麽問題,其實功課考試要pass都很簡單。
      但就是對那些演算法跟寫法的事情,跟他們相處討論,
      真的每次都會覺得自己智商被碾壓。
      而且我也感受到其實很多讀這個專業的很混。
      就是他們不只不努力,他們還對加强自己的效率沒有好奇。
      大神算的那麽快! 你們沒有興趣知道他們怎麽算的嗎?
      沒有,我有其他事情要做。
      我聽到一些同學這種態度,結果他們居然未來是要去業界工作的...
      然後雖然CS我最後1-2年級的所有課程有拿到至少A-的程度,我也算是常態性A+。
      就是全班很前面的。
      但我放棄讀CS跟做任何跟程序嗎有關係的工作的念頭了,
      那太神經病了,那種天才等級的大神根本就....說真的商學院,商業法律,會計,甚至醫學院我都不覺得能感覺到這種天才的完全碾壓,但那種數學,物理,演算法那種東西,天才真的是比藝術之神還可怕的存在。
      我現在玩很多游戲會自己寫mod做自己喜歡的東西進去。
      其實也多虧那時候有認真看資料結構跟演算法,而且也體驗到天才等級的演算法對速度的影響是到鬼神的地步。
      所以其實我覺得雖然我不做這行,但我還是有學到很多東西也有運用到我的興趣上。
      而像是玩很多游戲,不見得是顯示卡畫面計算的。
      像是rimworld那種游戲,我都可以發現他們太多地方的計算是沒有什麽最佳化過的。
      還有就是很多cpu瓶頸的游戲也沒有好好利用多程序,這是因爲rimworld的游戲邏輯結構造成他玩多程序有時間序上的計算問題,我一直覺得這問題其實要整個游戲重寫才能解決。
      但很可惜,rimworld dev絕對也不是什麽程序猿等級的亂寫,但我看過其他類似的游戲有重新寫游戲的整個邏輯架構去針對多程序,那運算速度之快也造成玩到後期的樂趣差很多。
      具體上來説,就是玩大地圖後期,你的存檔可以有1000個小人,還是100個而已這種差別。
      這差距天差地遠,但很可惜的就是很多最熱門的游戲已經寫壞,沒有辦法救了,而那些寫的好的,玩的人又太少,或是不對胃口,mod資源少,我也沒有那個體力自己寫500個mod 幾萬行代碼去把那些多程序的類rimworld游戲做mod做到我現在rimworld的這些mod的玩法,
      我寫跟最佳化我自己那幾個mod就已經很累了。寫500個全部的mod?這不亞於叫我直接寫一個多程序rimworld出來算了。
      所以我跟很多玩家就只能遷就這個原始架構最佳化很差的rimworld了。
      其實這就是我覺得瞭解一點點CS内容玩游戲的痛苦。
      因爲我玩的很多游戲其實根本連離最佳化都還有非常遙遠的距離。
      其他人天天在說這些游戲不用買很好的硬體設備。
      什麽? rimworld ? 那不就2D游戲嗎 ? 你不是買了4090?都玩什麽大作吧?怎麽整天玩rimworld?
      對 就rimworld。 我就喜歡玩很多這種cpu瓶頸的游戲,而且他們瓶頸的原因我也知道爲什麽,Dev也知道。
      也都知道其實可以解決,但很累,你重寫? 不可能我們玩家消費者幫你重寫吧? 有沒有搞錯?
      但就是沒有半個人願意修。
      是有啦,有一些多程序最佳化的mod計劃。
      但原版游戲dev 一更新游戲版本,mod就馬上被破壞。
      dev也沒有打算跟這些已經開始有進展的mod社群合作。
      而很多mod社群的用戶也因爲很多原因不支持那些最佳化改寫的mod。
      具體來説,就是像是
      某玩家安裝的10個美少女 mod 都不相容這個最佳化多程序mod。
      其實這問題很好解決,不是很大的問題,就是每一個mod作者都花一點時間重新架構一下自己的mod
      就好,而mod的規模都不會太大,所以其實一個一個mod自己的社群想辦法解決都是可以
      增加對多程序mod的支持。
      但問題是好,10個有3個作者願意花時間改。
      剩下7個停更了,或是不願意。
      接下來在這個裝了10個美少女mod的普通玩家就會去罵那個多程序最佳化的mod,
      去說 “你們這個mod讓我這很多mod都不能玩了, 真爛,還是其他最佳化mod更好”。
      所以rimworld多程序的改寫雖然理論上辦得到,但卻因爲社群整合的問題,實務上做不到。
      最後結果都是這種最佳化的熱情計劃都會進行到一半甚至已經有很大成果的時候,就死了。
      而始作俑者,就是原版游戲的dev居然都什麽年代了,還寫這種鬼架構。
      但沒有辦法,他大賣了,現在大家玩的其實不是他的游戲,
      是圍繞在他游戲架構基礎上的mod社群的整合。
      而很可惜的就是大部分的玩家其實也沒有很要求效率,他們可能沒有玩到後期。
      消費者沒有要求重寫,dev當然也不會重寫了,除非是那種有代碼潔癖的。
      而且現在重寫是接近不可能了,所以大家都是在等有沒有大神要重做一個。
      有,但很多玩法不一樣,而且mod社群也沒有大量移民過去。
      結果造成還是不能取代效能爛到爆的rimworld。
      就是地圖很大,計算量增加的時候,那個big o 的悲劇程度。
      根本不能玩了。
      結果就是10%有意識到這點的玩家在跟dev抱怨“ 天啊,這個 能重寫嗎? ”
      但沒有什麽屁用,反正錢都賺了。
      不只是rimworld,其實一堆熱門indies都是這種問題。甚至3A也有這種問題。
      但3A因爲大部分都顯示卡瓶頸所以比較不會遇到這種就目前沒有救了的情況。
      我就只是要玩一個游戲而已,爲什麽還要被這些懶惰的程序員折磨啊?
      我後悔讀了CS,因爲如果沒有讀,我不會這麽明確的理解我玩的這些游戲本來是可以好上10倍以上的。
      其實我覺得現在indies游戲業界的問題是,很多人是半路出家,可能連書都沒有買。
      就沒有看過資料結構跟演算法之類的書,然後他們就用最土法煉鋼的方式用unity那些其實有很多問題的引擎去寫最佳化很差的游戲算法,結果最後他們這些indies大賣,然後dev技術也終於進步的時候,才發現“啊 寫爛了, 但來不及了 不過也大賣 管他的”的情況。
      所以其實有興趣做這種東西的,我覺得都還是去正常的修大學的CS課程打好基礎,至少接觸過那些天才等級的人,瞭解那個碾壓等級的差距,然後這樣未來寫任何代碼的時候都會非常在意效率跟找看看有沒有大神已經弄出來的最佳化解法,而非自己用非常爛的運算去硬上。
      而這不是indies而已,那些大公司的3A其實裏面的程序猿是很多的。所以現在就變成大家都覺得要提升硬體才能玩。
      但實際上很多問題根本不是硬體問題,像是再多cpu都不能解決多程序利用效率差的這個問題。

    • @user-pg1md7bt5n
      @user-pg1md7bt5n 4 หลายเดือนก่อน +9

      还有用加减法和与或非来代替if判断的。cpu指令跳转的开销比普通运算大很多

    • @196wj4
      @196wj4 4 หลายเดือนก่อน +7

      很熱誠的心裡話,你對這遊戲愛的深沉,愛之深責之切,你也同樣的恨鐵不成鋼。
      感謝你們這些mod開發者對社區的貢獻,很多mod都很棒,給玩家很多的可能性和樂趣。
      謝謝

  • @litfal
    @litfal 4 หลายเดือนก่อน +78

    寫單晶片或DSP時也常常遇到這種優化,例如純整數平台上 fixed point 這類數學式的實作。
    log、pow 類的整數運算也很常用到這篇的一些概念例如轉指、牛頓內插或泰勒展開的數學法 (限定 fixed point 範圍到 0.5~1後很多手法能用)。
    sqrt()倒數最難直覺理解的是,float 轉 int 的部分,對 float 格式和 2 進位的感覺要很靈敏 (8:50 左右)

  • @KandyWabbit
    @KandyWabbit 4 หลายเดือนก่อน +50

    牛顿:我们站在巨人的肩膀上
    我:巨人太高我爬不上去

    • @D.Wapher
      @D.Wapher 3 หลายเดือนก่อน +5

      這一個個巨人疊疊樂都成參天神柱了😂

  • @user-uu3ws7tt6o
    @user-uu3ws7tt6o 6 หลายเดือนก่อน +193

    太猛了,作為會寫程式的人初見真的會WTF

    • @tmp1247
      @tmp1247 4 หลายเดือนก่อน +54

      能看懂 :wtf
      不知所云:wtf?

    • @user-uh1uh1sn7e
      @user-uh1uh1sn7e 4 หลายเดือนก่อน +5

      寫leetcode的時候寫到數學題跟greedy題
      常常也是這樣 哈哈

    • @jiachengjang2708
      @jiachengjang2708 3 วันที่ผ่านมา

      看懂一點點: 哦哦哦... 欸 然後勒

  • @Yamanashi_Yoshihiro
    @Yamanashi_Yoshihiro 4 หลายเดือนก่อน +166

    幹 超屌⋯⋯能把數學跟程式結合的人真的很猛
    雖然這些知識我都聽得懂 但是我真沒想過可以這樣結合
    幹 這學期修的MatLab原來就是他創立的 太扯⋯

    • @fastsakura1
      @fastsakura1 4 หลายเดือนก่อน +17

      我只能說在我們這些凡人的眼中那些人都是屬于非正常人類的存在,數學好的人不一定會編程,但要學的話很快就能上手,編程強的人數學通常也不會差.

    • @vincenzocheng4781
      @vincenzocheng4781 3 หลายเดือนก่อน +6

      程式設計期中期末不都是用程式來解數學題的嗎

    • @a86692472
      @a86692472 3 หลายเดือนก่อน +1

      程式的本質就是四則運算與存讀...

    • @vincenzocheng4781
      @vincenzocheng4781 3 หลายเดือนก่อน +2

      程式只會加法 減乘除都是用拆解成不一樣的加法

    • @36CGMA
      @36CGMA หลายเดือนก่อน +1

      程式根源是就是數學

  • @kuanmarco5853
    @kuanmarco5853 4 หลายเดือนก่อน +36

    最近就在學Numerical methods and computation, 演算法就推給我了😂

  • @yeustream1
    @yeustream1 4 หลายเดือนก่อน +52

    希望這些做出重大貢獻的程序員大神永遠不會被世人遺忘

    • @Chris-jy2qe
      @Chris-jy2qe 4 หลายเดือนก่อน

      長江後浪推前浪

    • @wei1234
      @wei1234 4 หลายเดือนก่อน +6

      @@Chris-jy2qe這些核心算法大多沒被取代 只是寫出來的人也許不久的將來就會被遺忘

    • @ReEd1327_
      @ReEd1327_ หลายเดือนก่อน +2

      @@wei1234 这些人的名字肯定会写在百科上的,但毕竟计算机历史至现在还不到一百年,再过几个一百年后要想留在人脑海里可能不太容易

    • @36CGMA
      @36CGMA หลายเดือนก่อน

      這些先驅者很難被遺忘
      比如物理學發展到現在,牛頓、伽利略、惠更斯這些幾百年前的先驅依舊老是被提起

  • @wanderingpalace
    @wanderingpalace 2 หลายเดือนก่อน +1

    這週末看到你的影片很充實
    感謝您

  • @user-ow4it6fe4i
    @user-ow4it6fe4i 2 หลายเดือนก่อน +10

    本来失眠,看完你的视频又困了。谢谢你♥

  • @pingkai
    @pingkai 4 หลายเดือนก่อน +23

    这种东西30年前自己搞软件卖钱的人很多都会,而且必须会,否则速度太慢卖不出去。后来硬件变快外加软件开发成了规模式,这种东西在一般开发者中就失传了。

  • @user-abiko_cccc
    @user-abiko_cccc 4 หลายเดือนก่อน +39

    简单地说就是他没用通用的平方根求解数学函数,而是自创了一个运算效率更高的平方根求解函数。这需要对底层算法原理有相当深入的了解才能实现。不过对现在的程序员来说,使用快速的移位运算(>)来进行平方/开平方 的运算以提升运算效率已经是一种比较常见的方式了。

  • @user-mj3nr9vt7x
    @user-mj3nr9vt7x 4 หลายเดือนก่อน +5

    不得不說真的很厲害,短短的程式碼卻帶來這麼大的成果

  • @_bruce_guan
    @_bruce_guan 2 หลายเดือนก่อน +1

    非常有幫助的影片,直白易懂
    Wikipedia: Fast inverse square root 也有不少描述跟一些延伸

  • @imadyTech
    @imadyTech 3 หลายเดือนก่อน +8

    在卡马克之前应该已经有类似算法。我中学时期用一台1MHz主频的Z80 CPU单板机Laser 310,整个机器只有16 KB ROM + 16KB RAM,操作系统是伟易达不知道魔改还是原创的,上层高级语言运行微软BASIC,平方根 三角函数都实现了,都是在机器码层次实现的,略微看过一篇介绍这些数学运算如何实现的博文,当时完全看不懂,现在想来大概是类似原理吧,但是卡马克有可能令此前算法效率进一步提升。感谢博主的介绍!

    • @sankoo3643
      @sankoo3643 2 หลายเดือนก่อน +1

      平方根牛顿法,三角函数泰勒公式

  • @user-vv2yz2ht4l
    @user-vv2yz2ht4l 4 หลายเดือนก่อน +6

    之前看這個演算法也啟發我自己去給我需要的領域搞了個近似解

  • @water-ban-bu7ex
    @water-ban-bu7ex 4 หลายเดือนก่อน +27

    這是我看過解釋最全面的講解

  • @Mingming_Studio
    @Mingming_Studio 4 หลายเดือนก่อน +10

    想出這一整串的簡直是神
    爽文漫畫女主也就這種程度😂

  • @mars3712-TW
    @mars3712-TW 4 หลายเดือนก่อน +8

    IEEE 754 這部分根本沒演示到浮點數的精髓,雖然只是為了後面化簡多項式,另外後面x進制部分記得也要有下標才好分辨

  • @yqzkizz9091
    @yqzkizz9091 2 หลายเดือนก่อน +3

    硬體不發達的年代才需要絞盡腦汁的搾乾每一點效能,反觀如今,硬體不斷迭代更新,大多使用場景都較難突破效能限制,當然也就沒人願意優化了

  • @coherentharmonic5097
    @coherentharmonic5097 2 หลายเดือนก่อน

    对计算机存储原理和微积分的理解之透彻让人佩服。不过我很好奇能不能用泰勒展开做这个东西

  • @enchantereddie
    @enchantereddie 4 หลายเดือนก่อน +32

    通常來説,編寫程式的時候要避免“魔法數字”,以利於將來維護(當然也可以把魔法數字放在一個變量裏面,必要時修改變量)。影片中的做法是在使用迭代法解算真實值的時候,從一個提前計算好的近似值開始,節省大量重複計算,就是贏在起跑綫上的意思。在這裏這個近似值的數字對於這部分的解算法是固定的,就可以直接寫在程式裏面。

    • @user-pg1md7bt5n
      @user-pg1md7bt5n 4 หลายเดือนก่อน +17

      对c来说,用宏或直接使用数字,和存在变量里是完全不一样的,中间差了一次内存读取,那就是100多个纳秒啊。好的程序员是不会这样写代码的。你说的不写魔法数字,这种规矩是给大工程里的普通程序员的。核心算法工程师不受这个约束,加个注释就够了

    • @jimmychen4308
      @jimmychen4308 4 หลายเดือนก่อน

      ​@@user-pg1md7bt5n用變數double 可以解決型態的問題,比方到底是整數還是浮點數

    • @scumbozo1675
      @scumbozo1675 4 หลายเดือนก่อน

      ​​@@user-pg1md7bt5n看來你完全不懂 C/C++ 對 macro 是如何編釋的

    • @miaomi819
      @miaomi819 3 หลายเดือนก่อน +6

      以現在工作類型來看是工控硬體程式設計與網路軟體程式設計的區別,工控硬體程式設計要求極高效率極低資源高可靠性完成所有任務,程式常常以"燒錄"的形式隨產品一起提供,這種 程式基本上就是大佬秀理解的地方,全是魔法數字和花式移位,東西跑起來美如畫三行程式碼能讓小白研究一天。 網路軟體程式設計要求高可讀性高維護性高修改/可移植性,非常在乎程式碼本身的書寫格式而不是實用效果//跑得慢就堆雲伺服器網路公司不缺硬件,原因也簡單這種程式碼 構成的系統不斷變化並有朝一日會變得非常龐大,需要多位工程師接力維護,方便人比方便cpu更重要,現在來看這幾乎是兩種完全不同要求的開發了。@@user-pg1md7bt5n

    • @noellee7577
      @noellee7577 2 หลายเดือนก่อน

      但有时候太注重时间复杂度的优化也会造成代码晦涩难懂, 很多代码时间上的区别要处理到十万甚至百万以上的数据才会有明显体感的时间差, 但代码实现的复杂程度差很多@@miaomi819

  • @Da-fl2jh
    @Da-fl2jh หลายเดือนก่อน

    感谢分享~

  • @cryingsmiles9010
    @cryingsmiles9010 4 หลายเดือนก่อน +74

    如今,如果你是依靠游戏引擎来制作游戏,那代码优化不是你的考虑。
    引擎本身就已经自动帮你优化了代码的运行。而代码优化也不利于开发和维护,因为你不一定能理解那窜代码、就好比那句“WTF”,如果这快速法哪里写错了,那么你在看不懂的情况下,要如何修正?
    而你要注意的是逻辑优化。比如一样物件需要计算一万次,那么能不能计算一次,再重复使用结果一万次?这一类才是如今程序员和设计师需要考虑的问题。
    ps:
    我针对的是代码语言。基本上所有游戏引擎使用高级语言,如java,c,c++,C#。优点是人看得懂,缺点是电脑并非最佳优化。
    低级语言如同二进制等则相反,电脑容易优化运行,但人看不懂。给你一堆二进制,你能看懂吗?
    如今游戏引擎大多提供高级语言的优化,虽然比不上低级语言,但也差不多。你作为程序员,写低级语言的好处也不会和高级语言相差太多。高级语言还有被理解的优势。
    因此排除为了符合方程式的理由外,我是不建议使用低级语言编写。
    比如视频里的二进制运算,就是低级语言的一种。当时没办法,方程式需要二进制运算达到最佳运算。

    • @Wind_of_Night
      @Wind_of_Night 4 หลายเดือนก่อน +19

      程式的本質就是拚積木,可以整合打包,也可以拆分。
      不過現代人時間成本下,直接使用打包的~如學術分科一樣,以前人很容易跨領域,現代則是太分科了【太多專業又細分、拆分了】。

    • @tomatotree940
      @tomatotree940 4 หลายเดือนก่อน +2

      个人觉得优化还是要的O(n)的代码 引擎也不会优化到O(1)去

    • @cryingsmiles9010
      @cryingsmiles9010 4 หลายเดือนก่อน +4

      ​@@tomatotree940 这就是我指的逻辑优化。一样物件需要计算一万次,那么能不能计算一次,再重复使用结果一万次?把O(n)改成O(1)?

    • @tomatotree940
      @tomatotree940 4 หลายเดือนก่อน

      我的,没有看到show more

    • @n7822123
      @n7822123 4 หลายเดือนก่อน +3

      贊同~ 理解容易 = 維護成本低
      程式 畢竟不是只有自己看的

  • @monster11229
    @monster11229 7 หลายเดือนก่อน +4

    貓片 愛了愛了

  • @user-cb5yl1sm5j
    @user-cb5yl1sm5j 4 หลายเดือนก่อน +22

    所以每次都有人问 学程序,数学一定要好吗,答案就是在这里。

    • @user-vv2yz2ht4l
      @user-vv2yz2ht4l 4 หลายเดือนก่อน +7

      很多應用面的不需要懂,就像之前我看到的有人在爭論到底要用python還是c開始學,正統資工系都覺得要c才能懂記憶體那些觀念,但是應用面的會覺得我學那些幹嘛,程式能把應用面的需求執行出來就好。

    • @goldfishbrainjohn2462
      @goldfishbrainjohn2462 4 หลายเดือนก่อน +11

      看領域啊,做應用程式的,是 domain knowledge 比較重要,數學沒那麼重要。但對做 ML 或 3D 等等的或是 IC 數學就重要了。
      寫程式重要的是解決問題的能力,如果只單單會數學,但不懂變通,也沒辦法解決問題。
      但我贊成人人都該學數學,數學能夠應用的範圍太廣了。

    • @Yueyelongbob
      @Yueyelongbob 3 หลายเดือนก่อน

      在我看来完全是两种世界观,学py是为了计算,学c是为了学汇编。
      在minecraft里,一个是搞游戏的,一个是玩数学的-_-

    • @wanderingpalace
      @wanderingpalace 2 หลายเดือนก่อน

      弄程序不能只把焦點放在設計和調換函數那種,對基層和數學的理論要懂,才能弄出一些革命性的創新
      c 和 assembly 那些基層一定要夠懂,不能只接觸高階語言例如PYTHON

  • @Yueyelongbob
    @Yueyelongbob 4 หลายเดือนก่อน +5

    就像当初我研究bresemhan时,发现简单的整数运算竟能无误差求出点阵圆时一样WTF

  • @_emc2_
    @_emc2_ 4 หลายเดือนก่อน +2

    Great video! respect.

  • @OneOfKevin
    @OneOfKevin 7 หลายเดือนก่อน +37

    傳說中的WTF代碼

  • @user-gn8lz7yl2x
    @user-gn8lz7yl2x 2 หลายเดือนก่อน +1

    這不是服字
    是要跪鍵盤磕頭
    我曾經看過別人代碼
    某些幾何上困難算法
    繞三圈就ok了
    嚇得一直問為啥,看了百遍都無法解決
    最後原來是限定部分條件,才能行的通的快速算法,真厲害

  • @suvantolas2608
    @suvantolas2608 4 หลายเดือนก่อน +6

    yt的神奇算法。。。最近在学习逻辑回归迭代

  • @HanyunGong
    @HanyunGong 4 หลายเดือนก่อน +4

    卡神在一次访谈中自己承认WTF代码不是他写的

  • @user-pw2tj3mz3g
    @user-pw2tj3mz3g 2 หลายเดือนก่อน

    這些理論我都學過了,但我還真沒辦法自己想出這套算法

  • @moonsword6813
    @moonsword6813 4 หลายเดือนก่อน +4

    非常精采!讀過纯數的我,完全聽唔明。

    • @c2co2co32-
      @c2co2co32- 2 หลายเดือนก่อน +2

      你讀純數還聽不懂,那我翻譯給你聽,他用了兩次近似法,第一次是log(1+x)=y函數跟x=y函數在[0,1]區間的近似性,第二次是牛頓法,用上一輪求的近似值再做誤差更小的近似

  • @MuhiIn
    @MuhiIn 4 หลายเดือนก่อน +12

    John Carmack已经是顶尖的天才,能让他说 What the fxxk? 的.....

    • @Zhaoleftstop
      @Zhaoleftstop 3 หลายเดือนก่อน +5

      只能說一山比一山高,一牛比一牛牛

  • @FilesKiller
    @FilesKiller 4 หลายเดือนก่อน +1

    真休息一會啊,我還以為要放廣告

  • @LeYuzer
    @LeYuzer 4 หลายเดือนก่อน +22

    以前看過,第一次見的時候真的wtf了,發現新世界

  • @user-so7ug7gd1x
    @user-so7ug7gd1x 4 หลายเดือนก่อน +3

    完播率地下室了属于是😂😂

  • @user-wm3hw6jy5l
    @user-wm3hw6jy5l 4 หลายเดือนก่อน +7

    介紹平方更快速算法(X
    開臭starfield(O

  • @user-rw5pl4tm5i
    @user-rw5pl4tm5i 3 หลายเดือนก่อน +1

    懷念不用買顯卡年代
    現在沒有顯卡大作都不能玩😂
    4090💸💸💸

  • @hangchen2023
    @hangchen2023 4 หลายเดือนก่อน

    这是真正的计算科学家!

  • @icanearn4630
    @icanearn4630 4 หลายเดือนก่อน +1

    我们缺课就是缺一群这样的人。

  • @user-zu3xz5mt9k
    @user-zu3xz5mt9k 4 หลายเดือนก่อน +16

    5:02 講錯了吧 IEEE754的指數範圍是 -126~127

    • @Yueyelongbob
      @Yueyelongbob 3 หลายเดือนก่อน

      我记得0要归为正数,所以是-128~127?

    • @thisisdami01
      @thisisdami01 3 หลายเดือนก่อน

      你没说错 单精度指数就是-126~127

    • @tanyach2582
      @tanyach2582 หลายเดือนก่อน

      ​@@Yueyelongbob是-126喔 因為bias過後的 all 1 跟 all 0 會被保留做其他用途 因此是127~-126沒錯

  • @TheInaosoft
    @TheInaosoft 4 หลายเดือนก่อน +10

    现在的游戏,多数基于Unity等引擎、框架来开发了。效果是炫酷了,但是性能就差了。很多引擎的底层API开发者没法修改。

    • @Dark-M-Snake
      @Dark-M-Snake 3 หลายเดือนก่อน +3

      引擎本身還是很多人在維護優化的
      而且更多時候我們追求的是便利性而非效能
      因為現在的計算機性能是十年前的上千萬倍了
      你花幾個月的時間修改底層代碼的同時,別的公司已經開發出一款遊戲了
      而且loading時間可能也只是從3秒下降到2.5秒…更別說修改底層代碼之後其他員工還要繼續開發遊戲,開發效率可能也更差

    • @wardyal5396
      @wardyal5396 2 หลายเดือนก่อน +1

      @@Dark-M-Snake 現在電腦性能可能還是沒有十年前的上千萬倍啦

  • @kanlihu7351
    @kanlihu7351 หลายเดือนก่อน

    学到知识了

  • @bowlongzl
    @bowlongzl 4 หลายเดือนก่อน +3

    这个故事我也听说过。。。大神就是大神

  • @luxhk3377
    @luxhk3377 3 หลายเดือนก่อน +2

    当年这个根本就不是有没有显卡的原因,是没有浮点运算单元处理器,就像80386 加 387的配置,而且换在今天的话语来说,不是没有显卡,是没有运算能力强的gpu。还有视频说的那位大神,在当年专业的程序员都是数学和逻辑的,其实比比皆是,z80 用asm 也可以用牛顿法,大前提是你要有二进制思维。现在的程序员做算法的也是比做git 拉框架拉库的苦力工有优势。

  • @keepcalmandcarryon8353
    @keepcalmandcarryon8353 2 หลายเดือนก่อน

    助眠的好影片,晚安。

  • @chowyongchai1643
    @chowyongchai1643 4 หลายเดือนก่อน +4

    WTF意思就是别碰,碰了程序就不走了😂

  • @jackma4955
    @jackma4955 4 หลายเดือนก่อน

    这个事情我记得是他看了某个备忘录😂

  • @user-tw8pk8lj6r
    @user-tw8pk8lj6r 4 หลายเดือนก่อน

    優質頻道

  • @user-gf9pd4oe1d
    @user-gf9pd4oe1d 22 วันที่ผ่านมา

    人早就创造了神 一代代码神但是能识别它还能运用的电脑更神

  • @user-tm6mm9bt8z
    @user-tm6mm9bt8z 4 หลายเดือนก่อน +1

    一个游戏里的一段代码都能这么屌,牛逼

  • @gjh3304
    @gjh3304 2 หลายเดือนก่อน

    因为这段太有名 AI爱把这段代码把这个写进去开平方 可能给代码很大的计算误差

  • @ucfg5113
    @ucfg5113 4 หลายเดือนก่อน +1

    現在的程式普遍越來越肥,因為越肥越會讓用戶升級裝備,遊戲廠商又省時,雙贏阿

  • @talkinghat88
    @talkinghat88 4 หลายเดือนก่อน

    我看完重拾青春

  • @TszYatLeung
    @TszYatLeung 4 หลายเดือนก่อน +1

    學到了... 數學果然牛

    • @TszYatLeung
      @TszYatLeung 4 หลายเดือนก่อน +1

      更正: 我以為我學到了, 眼睛和耳朵都會了, 就會腦子不會。

  • @lingstein3500
    @lingstein3500 4 หลายเดือนก่อน

    各个都是神人

  • @flintthuang
    @flintthuang 4 หลายเดือนก่อน +1

    6:49 强行晒猫

  • @740120love
    @740120love 4 หลายเดือนก่อน

    看不懂 但感覺很屌

  • @Joelseemtodelost
    @Joelseemtodelost หลายเดือนก่อน

    我耐着性子看完了,也没有看到怎么教我提升,我玩游戏的时候变流畅啊😅

  • @chishengwu7775
    @chishengwu7775 4 หลายเดือนก่อน

    未看先猜 快速反平方根算法 雷神之鎚

  • @yuli.kamakura
    @yuli.kamakura หลายเดือนก่อน

    William Kahan:浮点数的存储办法
    Cleve Moler,让 Walsh 受到启发的人,创办 MatLab
    Greg Walsh,平方根倒数快速算法
    Gary Tarolli,3dfx,同事 Brian Hook 跳槽去了一家 Game 公司,代码得到流传。
    这段 code 如何改变游戏?游戏中,曲面由平面组成,要求出光线在物体变面反射后的效果,就需要知道平面的单位法向量,单位法向量 = 坐标值除以 R 的平方根,节省时间就提高游戏帧率。在那个没有 NVD 显卡的年代,优化代码变得尤为重要。

  • @neilsteinwong8026
    @neilsteinwong8026 4 หลายเดือนก่อน

    牛逼!大写的

  • @Changwen666
    @Changwen666 3 หลายเดือนก่อน

    5:30 应该是约等号,不是等号。

    • @Changwen666
      @Changwen666 3 หลายเดือนก่อน

      9:25 typo

  • @edwardhuang1502
    @edwardhuang1502 4 หลายเดือนก่อน +2

  • @user-bz8sh6vg5k
    @user-bz8sh6vg5k หลายเดือนก่อน

    牛逼!

  • @howardyang3631
    @howardyang3631 4 หลายเดือนก่อน

    可以說這就是程式的演算法嗎?,還是叫做底层算法?我小白

  • @jackynet7862
    @jackynet7862 4 หลายเดือนก่อน +6

    一脸懵逼的进来,一脸懵逼的离开~

    • @xiao2009
      @xiao2009 4 หลายเดือนก่อน

      你悄悄地離開,不帶走一片雲彩

    • @wanderingpalace
      @wanderingpalace 2 หลายเดือนก่อน

      學懂C和數學就不難懂了,這些只是背一背理論就可以懂
      以前覺得蒙逼的地方只要肯認真學就一定能克服的
      這話也是對我說的,大家加油

  • @Hh-nf8nk
    @Hh-nf8nk 4 หลายเดือนก่อน

    都是數學家轉職過來的吧

  • @anchor9764
    @anchor9764 4 หลายเดือนก่อน +10

    對數就是我高中考數學考得稀爛的罪魁禍首,我認為高中三年數學對我來說對數難度真的排在第一

    • @user-hk4pz2of6k
      @user-hk4pz2of6k 4 หลายเดือนก่อน

      對數不就是說假如有有個數X
      logY(X)就是問請問X是Y的幾次方而已嗎

  • @user-ws6pi4qk2b
    @user-ws6pi4qk2b 4 หลายเดือนก่อน +3

    这一定是看懂了但是想不明白当初怎么写出来的才打了一句WTF

    • @xiao2009
      @xiao2009 4 หลายเดือนก่อน +1

      也有可能是根本沒看懂但它就是能跑
      所以註解了一句WTF😂

  • @kayxue2560
    @kayxue2560 4 หลายเดือนก่อน

    傳說中的魔數法求平方根

  • @nathananson1
    @nathananson1 4 หลายเดือนก่อน +7

    稱這種code叫優雅, 我不敢苟同,
    除非這個專案就確定只有你一個人做和維護, 然後也不會有人插手的話, 當然可以隨你高興怎麼寫
    可惜實務上沒有那麼單純🤣

  • @user-hv8lb7nb4g
    @user-hv8lb7nb4g 2 หลายเดือนก่อน

    当时做七夜的时候,就抄了这段代码。当时也是找了好久的资料查看原理。

  • @murezsy
    @murezsy 4 หลายเดือนก่อน

    那本红红的书拜托不要出现

  • @kensou2828
    @kensou2828 4 หลายเดือนก่อน

    仰视大神

  • @Mai-bu2tt
    @Mai-bu2tt 3 หลายเดือนก่อน

    嗯嗯 跟我想的一樣
    不然大家以為我看不懂

  • @user-system6creaters
    @user-system6creaters 2 หลายเดือนก่อน

    遊戲的對白:「哼!我倒要看「他」怎麼拼/組回去?」

  • @arthurng651
    @arthurng651 3 หลายเดือนก่อน

    利害了,把片全看完卻一句也不明白

  • @yuanshen399
    @yuanshen399 4 หลายเดือนก่อน

    python的吗

  • @ATKchung
    @ATKchung 3 หลายเดือนก่อน

    五體投地啊

  • @sakuratom4012
    @sakuratom4012 3 หลายเดือนก่อน +1

    有点绝望,全还给老师了,一头雾水

  • @TheBlvision
    @TheBlvision 4 หลายเดือนก่อน

    廳都聽不懂得我!
    WTF🤣😅

  • @michaelliu80
    @michaelliu80 หลายเดือนก่อน

    "id software"发音“亿的”, not ID

  • @user-ps3bd8kj5z
    @user-ps3bd8kj5z 21 วันที่ผ่านมา

    看到求根号二精确值的时候就已经傻了

  • @hirabbitt
    @hirabbitt 3 หลายเดือนก่อน

    原來是要寫服
    還以為要寫脏

  • @samuelyao3811
    @samuelyao3811 4 หลายเดือนก่อน

    牛逼

  • @viscourtroy
    @viscourtroy 3 หลายเดือนก่อน

    真係唔讀好數學﹑化學﹑物理學,都好難在在工層面有發展,更別說在航太﹑材料方面有長進。點解我咁蠢...為何我數學這麼差...

  • @fireandcandy
    @fireandcandy 4 หลายเดือนก่อน +2

    有人能解說一下 為什麼 1:13 導式怎麼不是y=2x-2嗎?😅

    • @a062693069
      @a062693069 4 หลายเดือนก่อน +6

      你想問的應該不是導式,是通過那點的切線。
      導式是y' = 2x,所以斜率a = 2 * 2 = 4。
      這條線通過點(2, 2),套入y = ax + b,就會得到y = 2x - 6這條線

    • @fireandcandy
      @fireandcandy 4 หลายเดือนก่อน

      @@a062693069 y=2x-6 應該是筆誤? (y=4x-6)
      如果不是筆誤的話 能夠理解你的解說了!是我單純的計算有誤
      感謝你!

  • @Testhome-up9kf
    @Testhome-up9kf 3 หลายเดือนก่อน

    在那個只有一顆 1 MHz 6502 CPU, 沒有 FPU 的年代, 像這類需要耗時的運算, 哪有那個美國時間 (應該說 CPU 時間)來計算咧, 很多遊戲都嘛採用查表法來代替耗時的計算以增加效率.

    • @wardyal5396
      @wardyal5396 2 หลายเดือนก่อน

      對阿 我點進來之前還以為是查表

    • @Testhome-up9kf
      @Testhome-up9kf 2 หลายเดือนก่อน

      @@wardyal5396 嗯! 而且程式碼簡短與否與執行速度還有開發效率間的關係並不成等比; 就以我個人經驗, N 年前我還有在摸軟體時, 初期可能完美主義傾向太高, 都想要將程式碼撰寫得面面俱到, 漂亮又簡短, 想當然爾所耗費的心力會比只是隨便寫寫但也能完成工作的程式碼要高出數倍甚至十倍以上. 現在要我碰, 我也只能搖搖頭, 拿著破缽要飯去.

  • @linlin2997
    @linlin2997 4 หลายเดือนก่อน +2

    6:23 這裡應該要是1.1*2^0吧,因為要先移位才能轉換他的進制
    總而言之就是為啥這裡還要再乘一次2^0?

    • @n7822123
      @n7822123 4 หลายเดือนก่อน

      把他想成 科學記號表示法
      指數位=0 Ex: 5 = 5.0 * 10^0

    • @linlin2997
      @linlin2997 4 หลายเดือนก่อน

      我知道,但你已經轉換成十進制了怎麼會是以2為底數

  • @kjyhh
    @kjyhh 4 หลายเดือนก่อน

    能让臭打游戏的人买单的算力为什么要劳烦大神?
    这种结果只不过是近似值,如果放进显卡里面的话显卡都不能挖矿了。😂(等等,这是不是更好?)

  • @JK-pz1ld
    @JK-pz1ld 4 หลายเดือนก่อน

    以前會為了幾行code特別優化,但現在這樣做會被罵

    • @n7822123
      @n7822123 4 หลายเดือนก่อน

      因為別人看不懂?

  • @viscourtroy
    @viscourtroy 3 หลายเดือนก่อน

    😮😮

  • @yang7141
    @yang7141 4 หลายเดือนก่อน +1

    看見神了

  • @MosesMcVeigh
    @MosesMcVeigh 3 หลายเดือนก่อน +1

    请注意最终代码第四行,牛顿迭代,3/2成立的意思是求n的平方根,如果第一次的y的初始值特别接近n,那么3/2成立。
    我就不解释了太麻烦,就这个迭代本身我想了半天,别的倒是还行。

    • @hikoyen7532
      @hikoyen7532 3 หลายเดือนก่อน

      我想半天還是想不出來,有點搞不懂的是:
      這個函式是求平方根倒數,那f(x)=x^2-1/number,感覺帶入牛頓法後跟第四行還是不一樣

    • @hsiangyuteng3634
      @hsiangyuteng3634 2 หลายเดือนก่อน

      @@hikoyen7532 我懂了,目的是求1/sqrt(number),所以透過牛頓法所要求的方程式為y = 1/x^2 - xi, where xi is the input number。帶入牛頓法的f(x)/f'(x)就能解出遞迴式為xn+1 = xn * (1.5 - 0.5 * xn^2 * xi),再去對應一下xn = y, 1.5 = threehalfs, 0.5xi = x2,得第四行程式碼即為 y * (threehalfs - x2 * y * y)

  • @racoon168
    @racoon168 4 หลายเดือนก่อน +1

    y=4x-6 那來的?

  • @james_toronto
    @james_toronto 4 หลายเดือนก่อน

    啊进制是什么?😂

  • @mickwang9199
    @mickwang9199 หลายเดือนก่อน

    一会儿阿进制,一会儿二进制,我怀疑自己的耳朵了。