求版上的高手帮我健检一下,我的程式码错在哪里了?
正确的话应该要从A1~C100和 D1的表格都要有值,但是却只在C1出现了100.6402的值
以下是我的程式码
Sub Monte_Carlo_PI()
Dim i As Long
Dim j As Long
Dim k As Long
Dim x As Double
Dim y As Double
Dim dist As Double
Dim ma As Long
ma = 100
Randomize
For i = 1 To ma
For j = 1 To ma
For k = 1 To ma
x = Rnd()
y = Rnd()
dist = (x - 0.5) ^ 2 + (y - 0.5) ^ 2
If dist <= 0.25 Then
dist = dist * 4
Else: dist = 0
End If
Next k
Next j
Next i
Worksheets("工作表2").Cells(i, 1) = x
Worksheets("工作表2").Cells(j, 2) = y
Worksheets("工作表2").Cells(k, 3) = dist
Worksheets("工作表2").Cells(1, 4) = WorksheetFunction.Average([C1:C100])
End Sub
作者:
wenyonba (射后不理很XX啊!!!!)
2015-03-24 20:11:00你的x,y,dist赋值,又没有写进Loop里面...
作者:
Yaiba (绯心刀刃)
2015-03-26 15:10:00把Worksheets("工作表2").Cells(i, 1) = x 到dist三行搬到NEXT K 上面不过看起来程式错很大...
作者:
lin0919 (无聊)
2015-03-27 13:09:00这怎会是求圆周率的方式?
没错阿,画一个边长2的方格,里面中间画一个半径1的内切圆,然后对里面一直丢铜板。如果你丢的铜板够多,最后圆内铜板数/方格内铜板总数就会等于pi/4不过看来他的程式中间就歪了 所以看起来不像
作者:
Yaiba (绯心刀刃)
2015-03-27 19:27:00嗯 我也是写了一个程式证实是对的 满有趣的
作者:
lin0919 (无聊)
2015-03-27 23:39:00他的写法适 边长一 里面中间画个半径0.5的内切圆然后丢硬币 应该如果在圆内dist=1 部在圆内dist=0然后再把dist加种起来平均*4我重写过就能求出3.14
作者:
wenyonba (射后不理很XX啊!!!!)
2015-03-29 10:34:00这个方法挺有趣的,我从前也不知道,不过刚刚写了VB试了一下,Rnd()一千万次,3.14156xxxx,似乎精度普普 XD不过一千万确实对这种数值方法来说,也没多大就是了~~经由原Po学了点东西,很不赖~~
作者:
Marty (DNA探针)
2015-03-30 10:20:00Rand() 10万次之后精度进展得很慢
作者:
Yaiba (绯心刀刃)
2015-03-30 16:20:00机率这种东西 本来就没有准度 有准度就去赌场发财了...只能说可以得到一个大约的数字 要精准是不可能的...