Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2020
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.52 KB | None | 0 0
  1. function isInCircle(x, y)
  2.     return x*x + y*y < 1
  3. end
  4.  
  5. function monteCarlo(N)
  6.     local inCircle = 0
  7.     for i=0,N do
  8.         if isInCircle(math.random(), math.random()) then
  9.             inCircle = inCircle + 1
  10.         end
  11.     end
  12.     return inCircle/N*4
  13. end
  14.  
  15. function deterministicCircle(N)
  16.     local inCircle = 0
  17.     for j=0,N do
  18.         local m = 0
  19.         for i=0,N do
  20.             local x,y = i/N, j/N
  21.             if isInCircle(x,y) then
  22.                 inCircle = inCircle + 1
  23.                 m = i
  24.             end
  25.         end
  26.     end
  27.     return inCircle/(N*N)*4
  28. end
  29.  
  30. function dichoFind(a, b, f)
  31.     local m = math.floor((a+b)/2)
  32.     if a == m then return m end
  33.     if f(m) then
  34.         return dichoFind(m,b,f)
  35.     else
  36.         return dichoFind(a,m,f)
  37.     end
  38. end
  39.  
  40. function dichoCircle(N)
  41.     local isIntCircle = function(j)
  42.         return function(i)
  43.             local x,y = i/N, j/N
  44.             return isInCircle(x,y)
  45.         end
  46.     end
  47.  
  48.     local inCircle = 0
  49.     for j=0,N do
  50.         local i = dichoFind(0,N,isIntCircle(j))
  51.         inCircle = inCircle + i + 1
  52.     end
  53.     return inCircle/(N*N)*4
  54. end
  55.  
  56. t1 = os.clock()
  57. r = monteCarlo(1000*1000*1000)
  58. t2 = os.clock()
  59. print(string.format("monte carlo   : %.10f\t%.2fs", r, t2-t1))
  60.  
  61. t1 = os.clock()
  62. r = deterministicCircle(1000*100*2)
  63. t2 = os.clock()
  64. print(string.format("deterministic : %.10f\t%.2fs", r, t2-t1))
  65.  
  66. t1 = os.clock()
  67. r = dichoCircle(1000*100*2)
  68. t2 = os.clock()
  69. print(string.format("dichotomique  : %.10f\t%.2fs", r, t2-t1))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement