这是C文件: http://simul.iro.umontreal.ca/rng/WELL19937a.c(我没有注释,正如L'Ecuyer所说的那样)
这是C标头: http://simul.iro.umontreal.ca/rng/WELL19937a.h
问题是:C文件中的 double(* WELLRNG19937a)(void)在哪里?
我没有看到它。但它存在。此代码适用于TIGCC,但产生0。
#include "WELL44497a.h"
#include <tigcclib.h>
void _main(void)
{
unsigned int u=33337;
InitWELLRNG44497a(&u); //this function probably wants array of good seeds but I don't have them.
double a = WELLRNG44497a() ;
clrscr();
printf("%f",a);
ngetchx();//wait for keyboard input
}
删除InitWELLRNG44497a(&amp; u)会使它抛出SIGSEGV(这可以保证其他功能存在)
如果你告诉我这个功能在哪里,我会非常感激的。更重要的是,如果你告诉我如何使用这个功能。PS。没有什么可以澄清了。这是一个非常愚蠢的问题,但已经得到了回答。函数给出零的原因是不同的。
答案 0 :(得分:0)
double (*WELLRNG19937a) (void)
是指向double funcname (void)
函数的指针。
在第一个函数中
void InitWELLRNG19937a (unsigned int *init)
你可以看到
WELLRNG19937a = case_1;
其中case_1是
double case_1 (void)
然后在main中调用由WELLRNG19937a
指针激活的函数。真正的被调用函数将是case_1
。
删除InitWELLRNG44497a(&amp; u)使其抛出SIGSEGV
由于is InitWELLRNG44497a
初始化函数指针,导致段错误,否则指针未初始化。