Ddavid
2 days ago
AI 大老 Andrej Karpathy 發的一篇文章,說明他遇到的一個坑。
簡而言之,Python 保證你給同樣的亂數種子會拿到同樣的亂數序列。可是沒有保證你不同的亂數種子就會拿到不同的亂數序列。而直覺上給 5 或 -5 應該要不一樣,但實際測試發現是一樣的,這導致他的某些測試前提錯誤XDAndrej Karpathy (@karpathy) on X
latest #46
掰噗~
2 days ago
這個問題問得很好, 我們請樓下來回答 (eyeroll)
Ddavid
2 days ago
我自己測試了,是真的XD
公式算出來的結果一致,但過程不同(?)
立即下載
Ddavid
2 days ago
wolfgangc: 不是……你這個,真的連原文都不看就想湊熱鬧回應真的不行耶XD
DdavidCh: 你的簡而言之和之前我聽到的狀況類似,大致這樣才問的
Ddavid
2 days ago
wolfgangc: 你看原文就有答案了,簡而言之之所以是簡而言之,就因為有省略呀XD
Ddavid
2 days ago
一篇 X 的文章也長不到哪裡去,先看一下吧XD
反正就不要只有CPython的結果是這樣就好
外行人看就是用曲線函數做值得到的error
Ddavid
2 days ago
wolfgangc: 只有部份實作是這樣倒不是不可能,不過 random 模組不比 secrets 模組,被刻意重寫的可能應該沒那麼高。
然後問題沒那麼複雜,就只是種子內部處理一開頭就被取 abs 而已。
討論裡面有人提到換成+3-3的,你有空再試試
Ddavid
2 days ago
wolfgangc: 真的看不懂你說的這句話啥意思XD
你是不是根本沒看懂他回了什麼XD
DdavidCh: 就,目前看來是算式的問題,我的理解是這樣(畢竟C和Python是兩件事)
Ddavid
2 days ago
wolfgangc: 你要不要請 ChatGPT 幫你解釋一下……XDDD
我有預料到你可能根本沒看就回應,但我沒有預料到你看了也沒用……XD
Romulus
2 days ago
靠,當初寫這個絕對值的人到底看到了什麼東西 XD
DdavidCh: 裡面有人問grok了,大致上就那樣
Romulus
2 days ago
這個真的有看但看成是算式的問題要懷疑看不懂英文吧,現在還要加上不會問AI
或是還有可能是用的中文和我們的不一樣……?
Ddavid
2 days ago
romulus: 最有趣的是他提到原始演算法並沒有依賴正整數,所以根本不需要多做這個 abs,真的是原作者到底在什麼理由下寫了 abs XD
或許他實作的版本因為某些理由反而有這依賴性?
Ddavid
2 days ago @Edit 2 days ago
我去看了一下 CPython 的 random . py:
# Translated by Guido van Rossum from C source provided by
# Adrian Baddeley. Adapted by Raymond Hettinger for use with
# the Mersenne Twister and os.urandom() core generators.
Romulus
2 days ago
我想了半天,實在想不到什麼不太蠢的誤會發生的原因 XD
Ddavid
2 days ago
所以真正原作者不是 Python,但沒聽過 C 有這問題,到底是轉過來時發生了啥事才導致其中的誰靈光一閃加上那個 abs XD
Romulus
2 days ago
CPython K27是啥
Romulus
2 days ago
總之我跑了一下網頁版PyPy,也是一樣的 XD
Ddavid
2 days ago @Edit 2 days ago
romulus: 還沒打完不小心輸入法沒切好就 Enter 出去了,已經改好XD
Romulus
2 days ago
很好,CPython背鍋 XD
https://images.plurk.com/7DtiCyeiCwc3PhbfBqLvVc.png
Ddavid
2 days ago
romulus: 喔,所以確實有實作沒 abs XDDD
Romulus
2 days ago
如果Jython是直接用Java去實作spec的
那有可能真的就是Guido van Rossum產生了工人智慧幻覺 XD
這什麼歷史遺留wwww
能理解既然都會轉成bitstream所以unsigned比較直接的那種「smell」
(也許跟溢位問題有關?)
但是既然要轉成unsigned應該要做的不是abs而是加上2^31之類的remapping吧
Ddavid
2 days ago
TudenD: 但既然要用 bit,原本是什麼東西根本就不重要,abs 反而讓值域減半了,沒有好處呀XD
Romulus
2 days ago
如果如comment說的就是要unsigned的話加abs完全對啊
但是MT19937要怎麼才會誤會需要unsigned我不懂 XD
因為我記得這題rust好像踩過類似的雷
Romulus
2 days ago
不懂裝懂很好玩嗎(歪頭)
只是提供路人意見而已
Romulus
2 days ago
好我想到一個了
MT19937輸出是32-bit unsigned int
想必輸出和輸入要同格式!所以輸入也要 unsigned int!
どや!
Romulus
2 days ago
Rust甚至沒有內建random,要用第三方套件
加上上一篇量子力學……不懂裝懂很好玩嗎
Ddavid
2 days ago
wolfgangc: 問題在於你實際上沒有提供值得討論的意見,而只是從錯誤出發點給出的空想XD
DdavidCh: 抱歉我幫不上忙XD
Ddavid
2 days ago
wolfgangc: 我們沒有要你幫忙,或者說你不要在不了解的情況下亂湊熱鬧發言就幫大忙了XD
Romulus
2 days ago
DdavidCh: 等等,所以這不是你認識的人?只是網路上來的不知道誰?用這個名字在那裡不懂裝懂裝熟?
Ddavid
2 days ago
其實湊熱鬧不是不行,那麻煩不要寫得好像一副在正經討論科技、原理的樣子好嗎XD
Romulus
2 days ago
應該……應該不是吧
Ddavid
2 days ago
romulus: 對,我不認識XD
Romulus
2 days ago
我的竹竿準備好了
Ddavid
2 days ago
romulus: 不用,放置即可XD
你想要自己 block 掉是沒問題XD
back to top