F
Fla As
Hello,
I have following Ruby code:
class Random
def initialize(init, im=139968, ia=3877, ic=29573)
@last = init
@im = im
@ia = ia
@ic = ic
end
def next(max)
(max * (@last = (@last * @ia + @ic) % @im)) / @im
end
end
v = Random.new(42.0)
10.times do
puts v.next(1.0)
end
And I try to write the next-function in c
float gen_random(int *last, float max, int IM, int IA, int IC) {
*last = (*last * IA + IC) % IM;
return (max * *last / (float)IM);
}
and with help SWIG I try make useable in Ruby but I can not.
require 'fastac'
...
def next(max)
# (max * (@last = (@last * @ia + @ic) % @im)) / @im
Fastac.gen_random(@last, max, @im, @ia, @ic)
end
...
$ ruby gen_random.rb
gen_random.rb:12:in `gen_random': Expected argument 0 of type int *, but
got Fixnum 42 (TypeError)
in SWIG method 'gen_random' from gen_random.rb:12:in `next'
from gen_random.rb:18
from gen_random.rb:17:in `times'
from gen_random.rb:17
[/code]
What I make wrong?
best regards
I have following Ruby code:
class Random
def initialize(init, im=139968, ia=3877, ic=29573)
@last = init
@im = im
@ia = ia
@ic = ic
end
def next(max)
(max * (@last = (@last * @ia + @ic) % @im)) / @im
end
end
v = Random.new(42.0)
10.times do
puts v.next(1.0)
end
And I try to write the next-function in c
float gen_random(int *last, float max, int IM, int IA, int IC) {
*last = (*last * IA + IC) % IM;
return (max * *last / (float)IM);
}
and with help SWIG I try make useable in Ruby but I can not.
require 'fastac'
...
def next(max)
# (max * (@last = (@last * @ia + @ic) % @im)) / @im
Fastac.gen_random(@last, max, @im, @ia, @ic)
end
...
$ ruby gen_random.rb
gen_random.rb:12:in `gen_random': Expected argument 0 of type int *, but
got Fixnum 42 (TypeError)
in SWIG method 'gen_random' from gen_random.rb:12:in `next'
from gen_random.rb:18
from gen_random.rb:17:in `times'
from gen_random.rb:17
[/code]
What I make wrong?
best regards