精華區beta C_Chat 關於我們 聯絡資訊
其實要不要 call rand() 即時產生亂數也是看工程師決定的... 不知道版上還有沒有人記得幾年前神抄之塔被人找出開盤時的盤面重覆性很高 然後有人下去拆包才發現原來開盤盤面是由一個固定有 450 個浮點數的表所決定 然後就出現了這個→https://pastebin.com/ehFB6ZXp 也就是說它的開局只有 450 種 (實際稍少, 因為一些演算法的原因)↑↑ 這個就是連 rand() 都懶得/不想呼叫的結果 就算系統提供的亂數某種程度上有點糟, 但有的時候這種鳥鳥的東西就很夠用了 -- Ace Snake Santa Clover Junpei June Seven Lotus 9th man cabin kitchen casino shower operating room laboratory T H E chart captain quarter confinement torture room steam engine room cargo chapel library study incinerator Gigantic Q director office security N O N A R Y archives control laboratory pec treatment garden pantry gaulem bay rec room crew quarters infirmary lounge elevator Tenmyouji Quark Dio G A M E S Luna Phi Sigma Alice Clover K -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.9.46 ※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1520430364.A.61B.html
LiNcUtT: 以前老game也常用預建表,call rand雖說消耗不高但還是有 03/07 21:48
holymars: LCG跑亂數比你從記憶體讀表快多了... 03/07 21:52
holymars: 一個加法一個乘法一個module都在register裡執行.. 03/07 21:52
holymars: 你查表還要去記憶體->cache->register 誰快不用說吧.. 03/07 21:52
kokal: 可能是為了遊戲體驗,要不然一開始就抽到爛盤面會很火 03/07 21:55
LiNcUtT: 那為啥以前很多老game搞預建表的啊?我以為是有差說XD 03/07 21:58
LiNcUtT: DOS/95那時的 03/07 21:59
LiNcUtT: call rand快又省工,那搞預建表的是再搞自己嗎XD 03/07 22:03
holymars: 你是真的decompile發現它記憶體裡有張表嗎... 03/07 22:04
holymars: rand跑出來的行為和預建表一模一樣,你怎麼分辨.. 03/07 22:04
holymars: 先用一個種子跑100次rand建表,和實際要用時在呼叫rand 03/07 22:05
holymars: 結果不是一模一樣嗎 03/07 22:05
LiNcUtT: 沒實際跑過,但記得以前不少文章都有提XD 03/07 22:07
LiNcUtT: 像原PO講的神魔這樣,我是沒實際去拆,說有表我就信了w 03/07 22:08
holymars: 那要看文章是企劃寫的還是程式設計師寫的.... 03/07 23:44
holymars: 為了理解方便,程式都會跟企劃說有張隨機表,每次跑出來 03/07 23:45
holymars: 結果是固定的,用來讓企劃理解PRNG的數學意義 03/07 23:45
holymars: 久而久之企劃們都以為真的有張表存在記憶體裡面,但實際 03/07 23:46
holymars: 上並不是... 03/07 23:46
yshinri: 我是有印象有看過 decompile 出來的程式碼, 確實是有表 03/08 07:53