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 "diff.h"
|
||||
#include "com_strcmp.h"
|
||||
#include "ngspice/randnumb.h"
|
||||
|
||||
#include "arg.h"
|
||||
|
||||
|
|
@ -193,6 +194,10 @@ struct comm spcp_coms[] = {
|
|||
{ 040000, 0, 0, 0 }, E_DEFHMASK, 0, 1,
|
||||
NULL,
|
||||
"[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,
|
||||
{ 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS,
|
||||
NULL,
|
||||
|
|
@ -660,6 +665,10 @@ struct comm nutcp_coms[] = {
|
|||
{ 040000, 0, 0, 0 }, E_DEFHMASK, 0, 1,
|
||||
NULL,
|
||||
"[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,
|
||||
{ 040000, 040000, 040000, 040000 }, E_DEFHMASK, 1, LOTS,
|
||||
NULL,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
#ifndef ngspice_RANDNUMB_H
|
||||
#define ngspice_RANDNUMB_H
|
||||
|
||||
#include "ngspice/wordlist.h"
|
||||
extern void com_sseed(wordlist *wl);
|
||||
|
||||
/* initialize random number generators */
|
||||
extern void initw(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -292,3 +292,35 @@ double exprand(double mean)
|
|||
expval = -log(CombLCGTaus()) * mean;
|
||||
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