下面的代碼給出了錯誤的答案。它應該給出大約0.5,這是一個數組的平均值,其中有許多隨機數在0和1之間。我認爲問題是因爲N是「大」,或者是生成的隨機數的精度?該代碼適用於較小的N值(10^7,10^6等)。一些建議將會有所幫助。對於N大的錯誤結果代碼。Common Lisp
預先感謝您。
(defun randvec(n)
(let ((arr (make-array n)))
(dotimes (i n)
(setf (aref arr i) (random 1.0))
)
arr
)
)
(defparameter N (expt 10 8))
(setf *random-state* (make-random-state t))
(defparameter vector1 (randvec N))
(format t "~a~%" (/ (reduce #'+ vector1) (length vector1)))
由錯誤錯誤的道歉我的意思是0和1; 「太大」 – Francisco
您正在遇到數值分析中精度失效的典型例子 - 增加不同比例的數字。取而代之,將每個數字/分開/添加 - 然後您將添加相同比例的數字。 – BadZen