關於打字/球拍的簡短提問。我目前正在努力通過Euler Project problems來更好地學習球拍。一些my solutions真的很慢,尤其是在處理素數和因素時。所以對於一些問題,我試圖製作一個打字/球拍版本,我發現速度沒有改善,恰恰相反。 (我試圖通過使用真正的大數字來減少開銷的影響,計算時間大約爲10秒。)類型球拍的優化...這是遠嗎?
我從Racket文檔中得知最佳優化發生在when using Floats/Flonums。所以...是的,我試圖使浮動版本的問題處理整數。如在this problem與racket version使用整數,和typed/racket one人爲地轉動整數漂浮。我不得不使用的招數:檢查兩個數字實際上意味着檢查他們在這個功能用來檢查是否x可以被Y分爲「足夠接近」,像之間的平等:
(: divide? (-> Flonum Flonum Boolean))
(define (divide? x y)
(let ([r (/ x y)])
(< (- r (floor r)) 1e-6)))
它的工作原理(以及...解決方案是正確的),我的速度提高了30%-40%。
這是多麼可以接受?人們是否真的在現實生活中這樣做?如果不是,使用整數時優化打字/球拍解決方案的最佳方法是什麼?或者應該在處理整數時完全放棄鍵入/拍攝並保留用於浮點計算的問題?
注意:對於平方根 - 使用'integer-sqrt'而不是'sqrt'查看。 – soegaard
是的,謝謝你的提示。 – nico7et8