2008-11-16
yarv2llvmでサンプルを書きました
|yarv2llvmのサンプルを追加しました。自然対数の底を約1000桁求めるというものです。
作っていて色々バグが出たので直しました。引数を渡す順番が違っていて、2つ以上引数を渡すとうまく動かなかったのには我ながら呆れました。
require 'yarv2llvm' YARV2LLVM::compile_file('sample/e-aux.rb', {:optimize => true, :disasm => false, :dump_yarv =>false}) p compute_e()
#!/bin/env ruby # Compute E without bignum # KETA = 257 # dst / n -> dst def div(n, dst) i = 0 r = 0 while i < KETA do d = dst[i] + r * 10000 r = d % n dst[i] = d / n i = i + 1 end end def add(src, dst) i = KETA - 1 c = 0 while i >= 0 do t = src[i] + dst[i] + c c = t / 10000 dst[i] = t % 10000 i = i - 1 end end def compute_e i = 0 f = 1 a = [] b = [] while i < KETA do a[i] = 0 b[i] = 0 i = i + 1 end b[0] = 1 a[0] = 0 n0 = 1 while f == 1 do f = 0 i = 0 while i < KETA do if b[i] != 0 then f = 1 end i = i + 1 end add(b, a) div(n0, b) n0 = n0 + 1 end a end
出力結果(すごい手抜き、改行を手で加えました)
[2, 7182, 8182, 8459, 452, 3536, 287, 4713, 5266, 2497, 7572, 4709, 3699, 9595, 7496, 6967, 6277, 2407, 6630, 3535, 4759, 4571, 3821, 7852, 5166, 4274, 2746, 6391, 9320, 305, 9921, 8174, 1359, 6629, 435, 7290, 334, 2952, 6059, 5630, 7381, 3232, 8627, 9434, 9076, 3233, 8298, 8075, 3195, 2510, 1901, 1573, 8341, 8793, 702, 1540, 8914, 9934, 8841, 6750, 9244, 7614, 6066, 8082, 2648, 16, 8477, 4118, 5374, 2345, 4424, 3710, 7539, 777, 4499, 2069, 5517, 276, 1838, 6062, 6133, 1384, 5830, 75, 2044, 9338, 2656, 297, 6067, 3711, 3200, 7093, 2870, 9127, 4437, 4704, 7230, 6969, 7720, 9310, 1416, 9283, 6819, 255, 1510, 8657, 4637, 7211, 1252, 3897, 8442, 5056, 9536, 9677, 785, 4499, 6996, 7946, 8644, 5490, 5987, 9316, 3688, 9230, 987, 9312, 7736, 1782, 1542, 4999, 2295, 7635, 1482, 2082, 6989, 5193, 6680, 3318, 2528, 8693, 9849, 6465, 1058, 2093, 9239, 8294, 8879, 3320, 3625, 944, 3117, 3012, 3819, 7068, 4161, 4039, 7019, 8376, 7932, 683, 2823, 7646, 4804, 2953, 1180, 2328, 7825, 981, 9455, 8153, 175, 6717, 3613, 3206, 9811, 2509, 9618, 1881, 5930, 4169, 351, 5988, 8851, 9345, 8072, 7386, 6738, 5894, 2287, 9228, 4998, 9208, 6805, 8257, 4927, 9610, 4841, 9844, 4363, 4632, 4496, 8487, 5602, 3362, 4827, 419, 7862, 3209, 21, 6099, 235, 3043, 6994, 1849, 1463, 1409, 3431, 7381, 4364, 546, 2531, 5209, 6183, 6908, 8870, 7016, 7683, 9642, 4378, 1405, 9271, 4563, 5490, 6130, 3107, 2085, 1038, 3750, 5101, 1574, 7704, 1718, 9861, 687, 3969, 6552, 1267, 1546, 8895, 7035, 354, 212, 3407, 8498, 1933, 4321, 450]
コメントを書く
トラックバック - http://d.hatena.ne.jp/miura1729/20081116/1226837201
リンク元
- 15 http://www.rubyist.net/~kazu/samidare/
- 6 http://d.hatena.ne.jp/keyword/LLVM
- 2 http://d.hatena.ne.jp/fujita-y/
- 2 http://d.hatena.ne.jp/keyword/808
- 2 http://github.com/miura1729/yarv2llvm/tree/master
- 2 http://k.hatena.ne.jp/keywordblog/自然対数の底
- 2 http://www.google.co.jp/search?hl=ja&q=ypsilon+scheme&lr=
- 2 http://www.google.co.jp/search?q=llvmruby&btnG=Google+検索&lr=&hl=ja&aq=f&oq=
- 2 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4ADBR_jaJP275JP276&q=RFC1213+の
- 2 http://www.google.com/search?client=safari&rls=ja-jp&q=正規表現+コンパイラ&ie=UTF-8&oe=UTF-8