[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: LuaJIT BitOp Bug with large numbers
- From: Mike Pall <mikelu-1201@...>
- Date: Sun, 1 Jan 2012 22:51:12 +0100
Eliot Eikenberry wrote:
> I've been spending the weekend trying to gain a deeper understanding
> of noise functions and trying to see what interesting things I can
> get out of them. After getting through Perlin/Simplex noise and
> diving into Worley(Cell) Noise, I discovered what appears to be a
> bug with the LuaJIT BitOp library when dealing with exceedingly
> large numbers. Namely, i'm experiencing this bug with the
> BitOp.band function.
Not a bug. http://bitop.luajit.org/semantics.html#undefined
> noise1d = function(x, r)
> local n = x * r
> n = bit.bxor(bit.lshift(n, 13), n)
Now assume: n = 2^31-1
> n = n * (n * n * 15731 + 789221) + 1376312589
n = 155792277846347238669208840085402
Which is way bigger than 2^51.
> n = (1.0 - bit.band(n, 2147483647) / 1073741824.0)
Which makes bit.band(n, 2147483647) an undefined operation.
And undefined really means 'undefined'. The compiler could do
anything: output random numbers, play towers of hanoi ...
--Mike