Random Number: The Mersenne Twister
24/04/2006
The Mersenne Twister is a new random number generator, invented/discovered in 1996 by Matsumora and Nishimura.
MT is a twisted GFSR(624,397), similar in spirit to R250 and in my tests it's comparable in speed to R250 (slightly slower than R250 alone, but faster than R250/521 combined). It takes up more space than R250 or R521, but less than the two combined. MT has an amazing period of 2^19937-1.
source
MT is a twisted GFSR(624,397), similar in spirit to R250 and in my tests it's comparable in speed to R250 (slightly slower than R250 alone, but faster than R250/521 combined). It takes up more space than R250 or R521, but less than the two combined. MT has an amazing period of 2^19937-1.
source
public sealed class MT { private int mt_index; private int mt_buffer[624]; public MT() { Random r = new Random(); for (int i = 0; i < 624; i++) mt_buffer[i] = r.Next(); mt_index = 0; } public int Random() { if (mt_index == 624) { mt_index = 0; int i = 0; int s; for (; i < 624 - 397; i++) { s = (mt_buffer[i] & 0x80000000) | (mt_buffer[i+1] & 0x7FFFFFFF); mt_buffer[i] = mt_buffer[i + 397] ^ (s >> 1) ^ ((s & 1) * 0x9908B0DF); } for (; i < 623; i++) { s = (mt_buffer[i] & 0x80000000) | (mt_buffer[i+1] & 0x7FFFFFFF); mt_buffer[i] = mt_buffer[i - (624 - 397)] ^ (s >> 1) ^ ((s & 1) * 0x9908B0DF); } s = (mt_buffer[623] & 0x80000000) | (mt_buffer[0] & 0x7FFFFFFF); mt_buffer[623] = mt_buffer[396] ^ (s >> 1) ^ ((s & 1) * 0x9908B0DF); } return mt_buffer[mt_index++]; } }
Random Number: R250/521
24/04/2006
R250 is what's known as a generalized feedback shift register, or GFSR. GFSRs are determined by two parameters, a length and an offset. R250 is actually GFSR(250,103), indicating a length of 250 and an offset of 103. R250 has a period of almost 2^250
source
source
public sealed class R250_521 { private int r250_index; private int r521_index; private int r250_buffer[250]; private int r521_buffer[521]; public R250_521() { Random r = new Random(); int i = 521; int mask1 = 1; int mask2 = 0xFFFFFFFF; while (i-- > 250) { r521_buffer[i] = r.Next(); } while (i-- > 31) { r250_buffer[i] = r.Next(); r521_buffer[i] = r.Next(); } /* Establish linear independence of the bit columns by setting the diagonal bits and clearing all bits above */ while (i-- > 0) { r250_buffer[i] = (r.Next() | mask1) & mask2; r521_buffer[i] = (r.Next() | mask1) & mask2; mask2 ^= mask1; mask1 >>= 1; } r250_buffer[0] = mask1; r521_buffer[0] = mask2; r250_index = 0; r521_index = 0; } public int random() { int i1 = r250_index; int i2 = r521_index; int j1 = i1 - (250-103); if (j1 < 0) j1 = i1 + 103; int j2 = i2 - (521-168); if (j2 < 0) j2 = i2 + 168; int r = r250_buffer[j1] ^ r250_buffer[i1]; r250_buffer[i1] = r; int s = r521_buffer[j2] ^ r521_buffer[i2]; r521_buffer[i2] = s; i1 = (i1 != 249) ? (i1 + 1) : 0; r250_index = i1; i2 = (i2 != 521) ? (i2 + 1) : 0; r521_index = i2; return r ^ s; } }
PHP Use Config ini
15/10/2005
use a .ini file to store your config data, for example the following file could be saved as config.ini:
Then load the config with the following code:
You can access the values with:
;my configuration file [general] site_name = "example site" [database] host = "my_db_host" db = "my_db" user = "my_db_user" pass = "mypassword"
Then load the config with the following code:
$config = parse_ini_file('config.ini',true);
You can access the values with:
echo $config['database']['host'];
Open the CD tray
08/06/2005
Does what it says on the tin
<SCRIPT LANGUAGE="VBScript"> <!-- Set oWMP = CreateObject("WMPlayer.OCX.7" ) Set colCDROMs = oWMP.cdromCollection if colCDROMs.Count >= 1 then For i = 0 to colCDROMs.Count - 1 colCDROMs.Item(i).Eject Next ' cdrom End If --> </SCRIPT>
Convert age to dog years
01/06/2005
Converts human years to dog years.
### get the original age age = input("Enter your age (in human years): ") print # print a blank line ### do some range checking, then print result if age < 0: print "Negative age?!? I don't think so." elif age < 3 or age > 110: print "Frankly, I don't believe you." else: print "That's", age*7, "in dog years." ### pause for Return key (so window doesn't disappear) raw_input('press Return>')
Like Usage in SQL
28/04/2005
Searches for any occurence of bob
SELECT `death` FROM `bats` WHERE `name` LIKE '%bob%';
Form Return Value
22/04/2005
To get a form to return a value
call:
Dialog:
call:
passwordDlg passForm = new passwordDlg(); if( passForm.ShowDialog(this) == DialogResult.OK ) { // OK, do something with the password. MessageBox.Show( this, "The password entered was: " + passForm.getPass()); } passForm.Dispose();
Dialog:
DialogResult = DialogResult.OK; Close(); public System.String getPass() { return textbox1.Text; }