On Mon, Sep 6, 2010 at 9:31 PM, Dima Pasechnik <[email protected]> wrote:
> I wonder how does GAP pick up the seed? (Don't even know where to look
> in the code...)
It is in sage/misc/randstate.pyx.
> On the other hand, how would one call
> current_randstate().set_seed_gap() from GAP?
You can't call it from GAP, but it just does the following calls
prev_mersenne_seed = gap.Reset(gap.GlobalMersenneTwister,
mersenne_seed)
prev_classic_seed = gap.Reset(gap.GlobalRandomSource, classic_seed)
which are just GAP calls. If the machine is little endian, then
classic_seed and mersenne_seed are the same. If the machine is big
endian, then the following following comment applies:
# GAP's random number generator initialization
# (in integer.c, in FuncInitRandomMT) takes its
# seed as a string, then converts this string into
# an array of 32-bit integers just by casting the
# pointer. Thus, the result depends on the
# endianness of the machine. As a workaround, we
# swap the bytes in the string ourselves, so that
# GAP always gets the same array of integers.
Thus, the following is done
seed = str(seed)
new_seed = ''
while len(seed) >= 4:
new_seed += seed[3::-1]
seed = seed[4:]
seed = '"' + new_seed + '"'
mersenne_seed = seed
--Mike
--
To post to this group, send an email to [email protected]
To unsubscribe from this group, send an email to
[email protected]
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org