command.c, add command 'setseed'
randnumb.c, add function com_sseed for immediately setting the seed of the random number generator 'setseed' uses variable rndseed as seed 'setseed <n>' uses <n> as seed and sets rndseed to <n>
This commit is contained in:
parent
7be6ae2522
commit
10f50b2fc9
|
|
@ -83,6 +83,7 @@
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include "diff.h"
|
#include "diff.h"
|
||||||
#include "com_strcmp.h"
|
#include "com_strcmp.h"
|
||||||
|
#include "ngspice/randnumb.h"
|
||||||
|
|
||||||
#include "arg.h"
|
#include "arg.h"
|
||||||
|
|
||||||
|
|
@ -193,6 +194,10 @@ struct comm spcp_coms[] = {
|
||||||
{ 040000, 0, 0, 0 }, E_DEFHMASK, 0, 1,
|
{ 040000, 0, 0, 0 }, E_DEFHMASK, 0, 1,
|
||||||
NULL,
|
NULL,
|
||||||
"[vecname] : Change default scale of current working plot." } ,
|
"[vecname] : Change default scale of current working plot." } ,
|
||||||
|
{ "setseed", com_sseed, FALSE, FALSE,
|
||||||
|
{ 04, 0, 0, 0 }, E_DEFHMASK, 0, 1,
|
||||||
|
NULL,
|
||||||
|
"[seed value] : Reset the random number generator with new seed value." } ,
|
||||||
{ "transpose", com_transpose, FALSE, FALSE,
|
{ "transpose", com_transpose, FALSE, FALSE,
|
||||||
{ 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS,
|
{ 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
@ -660,6 +665,10 @@ struct comm nutcp_coms[] = {
|
||||||
{ 040000, 0, 0, 0 }, E_DEFHMASK, 0, 1,
|
{ 040000, 0, 0, 0 }, E_DEFHMASK, 0, 1,
|
||||||
NULL,
|
NULL,
|
||||||
"[vecname] : Change default scale of current working plot." } ,
|
"[vecname] : Change default scale of current working plot." } ,
|
||||||
|
{ "setseed", com_sseed, FALSE, FALSE,
|
||||||
|
{ 04, 0, 0, 0 }, E_DEFHMASK, 0, 1,
|
||||||
|
NULL,
|
||||||
|
"[seed value] : Reset therandom number generator with new seed value." } ,
|
||||||
{ "transpose", com_transpose, FALSE, FALSE,
|
{ "transpose", com_transpose, FALSE, FALSE,
|
||||||
{ 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS,
|
{ 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
#ifndef ngspice_RANDNUMB_H
|
#ifndef ngspice_RANDNUMB_H
|
||||||
#define ngspice_RANDNUMB_H
|
#define ngspice_RANDNUMB_H
|
||||||
|
|
||||||
|
#include "ngspice/wordlist.h"
|
||||||
|
extern void com_sseed(wordlist *wl);
|
||||||
|
|
||||||
/* initialize random number generators */
|
/* initialize random number generators */
|
||||||
extern void initw(void);
|
extern void initw(void);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -292,3 +292,35 @@ double exprand(double mean)
|
||||||
expval = -log(CombLCGTaus()) * mean;
|
expval = -log(CombLCGTaus()) * mean;
|
||||||
return expval;
|
return expval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* seed random number generators immediately
|
||||||
|
* command "setseed"
|
||||||
|
* take value of variable rndseed as seed
|
||||||
|
* command "setcirc <n>"
|
||||||
|
* seed with number <n>
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
com_sseed(wordlist *wl)
|
||||||
|
{
|
||||||
|
int newseed;
|
||||||
|
|
||||||
|
if (wl == NULL) {
|
||||||
|
if (!cp_getvar("rndseed", CP_NUM, &newseed)) {
|
||||||
|
newseed = getpid();
|
||||||
|
cp_vset("rndseed", CP_NUM, &newseed);
|
||||||
|
}
|
||||||
|
srand((unsigned int)newseed);
|
||||||
|
TausSeed();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ((sscanf(wl->wl_word, " %d ", &newseed) != 1) || (newseed <= 0) || (newseed > INT_MAX)) {
|
||||||
|
fprintf(cp_err, "Warning: Cannot use %s as seed!\n\n", wl->wl_word);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
srand((unsigned int)newseed);
|
||||||
|
TausSeed();
|
||||||
|
}
|
||||||
|
printf("\nSeed value for random number generator is set to %d\n", newseed);
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue