スキップしてメイン コンテンツに移動

node.js でメルセンヌ・ツイスタを使ってみる

node.js でメルセンヌ・ツイスタを使ってみる

概要

node.js でメルセンヌ・ツイスタを使ってみる。

メルセンヌ・ツイスタとは?

 乱数を作成するアルゴリズムです、このアルゴリズムが出来る前の乱数の品質と比べると、とても高い品質の乱数のを生成できるそうです。
 今回は、ありがたいことに先人様がメルセンヌ・ツイスタのモジュールを作られておりましたので、そのモジュールを使用させていただきます。

準備

npm install mersennetwister

ソースコード

test-mt.js
"use strict";
// 乱数生成ハードウェアを誰かさんにおすすめしたので
// node.js でメルセンヌ・ツイスタを使ってみようと思う。


// 参考
// https://www.npmjs.org/package/mersennetwister
var MersenneTwister = require('mersennetwister');


var seed = new Date().getTime();
var mt = new MersenneTwister(seed);


console.log("random 32-bit integer : " + mt.int());    // random 32-bit integer
console.log("random 31-bit integer : " + mt.int31());  // random 31-bit integer

console.log("***** random float in the interval *****");
console.log("[0;1[ with 32-bit resolution  : " + mt.rnd());       // random float in the interval [0;1[ with 32-bit resolution
console.log("[0;1[ (same as mt.rnd() above : " + mt.random());    // random float in the interval [0;1[ (same as mt.rnd() above)
console.log("[0;1[ with 53-bit resolution  : " + mt.rndHiRes());  // random float in the interval [0;1[ with 53-bit resolution
console.log("[0;1] : " + mt.real());      // random float in the interval [0;1]
console.log("]0;1[ : " + mt.realx());     // random float in the interval ]0;1[


console.log("Get 20 randm num.");
for (var i = 0; i < 20; ++i) {
 console.log(mt.int());
}

結果

console
random 32-bit integer : 3361983155
random 31-bit integer : 1075484222
***** random float in the interval *****
[0;1[ with 32-bit resolution  : 0.6424563720356673
[0;1[ (same as mt.rnd() above : 0.2669790524523705
[0;1[ with 53-bit resolution  : 0.8806914008955259
[0;1] : 0.030056524330297606
]0;1[ : 0.7159623290644959
Get 20 randm num.
2983655224
46984516
2593960713
3944391846
2917759393
2613605667
3381154927
4280000911
2607990047
2985536421
3036380415
1156428659
2766235998
2406919479
3341605894
347666700
1479780645
3380667811
1631716601
309760424

感想

私は物理乱数生成器なくても生きていけそうです。

参考

mersennetwister

このブログの人気の投稿

記述試験の書き方(仮)

記述試験の書き方(仮) 1,まえがき   法学部の試験では記述式の試験が出てくる。   その試験では、あるテーマについて自由に論ぜよとされている。 しかし、論ぜよと言われても、どのように論じればいいのか、すなわち、記述の仕方について教わったことがない(よくよく考えると、法的文章力を習得させる事だけが目的の授業はないと思われる)。   本稿では、私自身が法学畜になり、見聞きし、実際に活用している論述方法についてまとめている、はずである。その要点は、①条文、判例、学説を使う。②単なる事実と法的事実を区別する。③文章内に一貫性を持たせる。である。 法律と、プログラミング

本サイトの今後について

告知 本サイトは今後更新されることは、おそらくありません。 過去記事等はこのまま放置するつもりです。内容の陳腐化並びにその正確性等については保証はできません。自己責任で活用いただければと思います。 This site won't update in future. And Thank's everyone. new site -> sysrigar

node.js で SQLite3 を使用するコードを書くときの予備録

node.js で SQLite3 を使用するコードを書くとき、予備録 まず、非同期処理。 C言語や Perl のように上から下に処理が続くと決して思ってはいけない。 SQLite3 の each は SQL 文実行完了時に呼び出す関数を指定できる SQLite をインストールします、 npm install sqlite3 [test.js] var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(':memory:'); db.serialize(function() { db.run("CREATE TABLE lorem (info TEXT)"); var stmt = db.prepare("INSERT INTO lorem VALUES (?)"); for (var i = 0; i < 10; i++) { stmt.run("Ipsum " + i); } stmt.finalize(); var listInfo = new Array(); db.each("SELECT rowid AS id, info FROM lorem", function(err, row) { var tmp = new Object(); tmp.id = row.id; tmp.info = row.info; console.log("[ROW]\t" + row.id + ": " + row.info); listInfo.push(tmp); }, function() { // Each 完了時に呼び出される for (var i = 0; i < listInfo.length; i++) { console.log("[BUF]\t" + listInfo[i].id + ": " + listInfo[i].info); } console.lo