On 5/31/2012 9:51 PM, Mike Parker wrote:
On 5/31/2012 9:40 PM, TJB wrote:
One more question, if I may. I noticed that I forgot to include the
set_seed function. The call to rnorm works the way I have called it, but
it must be using some default seed (its a random number generator).
I have tried including the set_seed function as follows:
import std.stdio;
extern (C) void set_seed(unsigned int, unsigned int);
extern (C) double rnorm(double, double);
void main() {
set_seed(0,77991);
foreach(i; 0 .. 100) {
writeln(myfunc(0.0, 1.0));
}
}
double myfunc(double a, double b) {
return rnorm(a, b);
}
I compile this the same way as you suggest, but now the compiler is
squealing at me with the following message:
$ dmd rnorm.d -L-L/usr/lob -L-lRmath -L-lm
rnorm.d(6): found 'int' when expecting ')'
rnorm.d(6): semicolon expected following function declaration
rnorm.d(6): Declaration expected, not ','
When I grep set_seed in Rmath.h I get:
$ grep set_seed Rmath.h
void set_seed(unsigned int, unsigned int);
So I think I have called it correctly. Any thoughts or suggestions?
Thanks, you have been so helpful!
TJB
D doesn't know anything about C's 'unsigned int'. You need to convert
parameters to the equivalent in D, which would be uint.
extern (C) void set_seed(unsigned int, unsigned int);
See the following page for more info on interfacing with C:
http://dlang.org/interfaceToC.html
Sorry, I meant:
extern (C) void set_seed(uint, uint);