# Monte Carlo Method and pi

Fernando Perez fperez528 at yahoo.com
Mon Jul 12 01:13:08 CEST 2004

```Paul Rubin wrote:

> Fernando Perez <fperez528 at yahoo.com> writes:
>> Note that the above isn't 100% fair, since I'm calling the stdlib
>> rand, a C-coded simple generator, while v1 calls python's random.py,
>> a Python-coded Wichmann-Hill one.
>
> random.random in python 2.2 and later calls the Mersenne Twister generator,
> a very fast generator implemented in C.

Sure?

[python]> ipython
Python 2.2.3 (#1, Oct 15 2003, 23:33:35)

IPython 0.6.1.cvs -- An enhanced Interactive Python.
?       -> Introduction to IPython's features.
@magic  -> Information about IPython's 'magic' @ functions.
help    -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.

In [1]: import random

In [2]: random.random??
Type:           instance method
Base Class:     <type 'instance method'>
String Form:    <bound method Random.random of <random.Random instance at
0xa166834>>
Namespace:      Interactive
File:           /usr/lib/python2.2/random.py
Definition:     random.random(self)
Source:
def random(self):
"""Get the next random number in the range [0.0, 1.0)."""

# Wichman-Hill random number generator.
#
# Wichmann, B. A. & Hill, I. D. (1982)
# Algorithm AS 183:
# An efficient and portable pseudo-random number generator
# Applied Statistics 31 (1982) 188-190
#
#        Correction to Algorithm AS 183
#        Applied Statistics 33 (1984) 123
#
#        McLeod, A. I. (1985)
#        A remark on Algorithm AS 183
#        Applied Statistics 34 (1985),198-200

# BEGIN CRITICAL SECTION
x, y, z = self._seed
x = (171 * x) % 30269
y = (172 * y) % 30307
z = (170 * z) % 30323
self._seed = x, y, z
# END CRITICAL SECTION

# Note:  on a platform using IEEE-754 double arithmetic, this can
# never return 0.0 (asserted by Tim; proof too long for a comment).
return (x/30269.0 + y/30307.0 + z/30323.0) % 1.0

In [3]:

This looks strangely like python to me :)

You are correct under 2.3:

[python]> python2.3 `which ipython`
Python 2.3.3 (#1, Mar  6 2004, 22:39:33)

IPython 0.6.1.cvs -- An enhanced Interactive Python.
?       -> Introduction to IPython's features.
@magic  -> Information about IPython's 'magic' @ functions.
help    -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.

In [1]: import random

In [2]: random.random??
Type:           builtin_function_or_method
Base Class:     <type 'builtin_function_or_method'>
String Form:    <built-in method random of Random object at 0x907614c>
Namespace:      Interactive
Docstring:
random() -> x in the interval [0, 1).

In [3]:

The fact that ipython fails to show source under 2.3 is an indication that the
method is loaded from a C extension.

But the tests I posted where done using 2.2.

Cheers,

f

ps.  My main point was to illustrate weave's usage, so this doesn't really
matter.

```