Nr has no integer representation

I know that rounding to integers ought to fix this error, however the code below still generates this error once in a blue moon and I don’t understand how that’s even possible. Is there any case in which // doesn’t generate an integer?

It happens rarely (but surely) so it’s quite difficult to narrow it down.

local r,g,b,a = map.img:get(lp.x//1, lp.y//1) 
if a/255 >= .1 then ... end

@Kirl Since a blue moon happens once every 2.7 years, then you shouldn’t get that error again until Sept 2020. So I wouldn’t worry about it anymore. Just kidding. I wrote a program that took 100,000,000 random numbers between 0.0000000000000 and 99.999999999999 and did the //1 on them without getting the integer error. Without seeing the whole range of code that’s causing the error and being able to run it, I can’t say why it happens. Below I show different numbers with a lot of digits and whether they cause the error or not. What I’m trying to show is that the //1 gave an integer without exception, so something else might be happening. But like I said, without actually having the code I can’t be sure.

These numbers will cause the integer error
5.999999999999999 
5.000000000000001 

Those same numbers //1 don’t cause the integer error
5.999999999999999//1
5.000000000000001//1

Those same numbers one more digit longer didn’t cause the integer error.
5.9999999999999999 
5.0000000000000001

@Kirl What type of device are you using and what version of Codea are you running.

@Kirl Using the r,g,b,a line of code you show above, these are the 2 errors I can get. The first error I get if I force either lp.x or lp.y to use a fractional number. The second error I get if I force lp.x or lp.y to use a value of 0. Otherwise, I ran your line of code 100,000,000 times with random numbers without getting an error.

Main:9: bad argument #1 to 'get' (number has no integer representation)
stack traceback:
	[C]: in method 'get'
	Main:9: in function 'setup'

    
Main:9: pixel out of bounds of image, 100, 100 -> given 0, 46
stack traceback:
	[C]: in method 'get'
	Main:9: in function 'setup'

I put an extra line in.

if lp.x//1 %1 ~= 0 or lp.y//1 %1 ~= 0 then print(lp) end Got (nan,nan).
At least it points to user error as usual. I suppose Im dividing by 0 somwhere…

Just learned this: print(1/0, 0/0) Prints inf nan
Reminded me of this: https://m.youtube.com/watch?v=eWuRwu2DhwU

Thanks anyway Dave!