Why does math.random(999999999999) returns 1 in Lua? -
i tried: print(math.random(999999999999))
, has printed 1
.
also math.random()
includes 999999999999
printing same thing. examples:
print(math.random(1.999999999999))
» 1
print(math.random(1999999999999))
» 1
for k,v in next,{math.random(999999999999), math.random(1999999999999), math.random(2.999999999999)} print(v) end
» 1
local n = math.random(999999999999) print(n==1)
» true
then think understood (if know lua of course). can explain me?
@edits:
the lua version i'm using 5.2.
i tried print(math.random(-999999999999))
, printed 111711452
. looks worked positive number.
this problem surely because math.random
treats input arguments passed in lua 5.1 and/or 5.2. [mathlib.c]
1:
as may know in c
, standard int can represent values -2,147,483,648
2,147,483,647
. adding +1
2,147,483,647
, in use-case, overflow , wrap around value giving -2,147,483,648
. end result negative since you're multiplying positive negative number.
there few ways rectify , handle problem:
- upgrade latest lua version 5.3 . 1 has since fixed issue treating input arguments lua_number instead.
- switch luajit not have integer overflow issue.
- patch lua 5.1 and/or 5.2 source fix , recompile.
- modify random range not overflow
and last query read documentation:http://lua-users.org/wiki/mathlibrarytutorial
notice last line quotes:
math.random(upper)
generates integer numbers between 1 , upper.upper , lower must integer. in other case lua casts upper integer, givingmath.floor(upper)
, othersmath.ceil(upper)
, unexpected results (the same lower).
Comments
Post a Comment