Take the 2-minute tour ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

How/why does this noise function work?

function noise(x)
    x = (x << 13) ^ x;
    return (1.0 - ((x * (x * x * 15731 + 789221) + 1376312589) & 0x7fffffff)
               / 1073741824.0);

I've found it in several places with different primes, but couldn't find an actual explanation of why/how it works.

I know what the code itself is doing (shift, xor, multiply-and-overflow, bitwise-and w/ intmax - 1, etc), but I don't get why those things are done or how it results in acceptable noise.

Why are these operations, why this order? Why primes? I know "because non-primes can generate observable patterns", but why is that?

Why divide by (2**32 - 1)/2? or rather, why does that give a 0..2 value?

share|improve this question

migrated from stackoverflow.com May 28 '11 at 17:44

This question came from our site for professional and enthusiast programmers.

2  
What is a noise function, and what does it mean for a noise function to work? –  Qiaochu Yuan Jun 15 '11 at 19:03
    
Looks like some kind of a PRNG to me. I'm not sure that there is much theory behind this. I added a random tag to attract people who might be more knowledgeable. That 0x7ff... is $2^{31}-1$ and the divisor is $2^{30}$. Therefore the result is 1.0-something, with something in the interval $[0,2)$. So (barring a mistake) the values $\in(-1,1]$. –  Jyrki Lahtonen Jun 15 '11 at 19:09
    
I suppose the word 'noise' is used here in the sense of 'white-noise' process. It seems some kind of pseudo-random number generator –  leonbloy Jun 15 '11 at 19:10
    
I've found it in several places Where? –  leonbloy Jun 15 '11 at 19:11

1 Answer 1

It is a random noise generator. Did Google search on: "noise function" 0x7fffffff

See: http://www.qwerty-games.com/viewvc/Sardon3D/Branches/Networking/src/Noise.cpp?view=markup

http://libnoise.sourceforge.net/noisegen/index.html

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.