lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Fri, May 28, 2010 at 04:41, Vyacheslav Egorov <mister.aleph@gmail.com> wrote:
> Double 0xFF000000 is too big to be represented by a signed integer.
> You should get value from Lua stack as double then cast it to unsigned
> integer.
> --
> e.v.e
>
>
> On Fri, May 28, 2010 at 12:14 PM, Dmitry Gapkalov <gapkalov@gmail.com>
> wrote:
>>
>> On MSVC compiler this construction
>> #define lua_number2int(i,n)  __asm {__asm fld n   __asm fistp i}
>> Example:
>> bit.band(0xFF000000, 0x00FFFFFF)
>> while debug after getting from stack, the first value is 0x80000000,
>> second 0xFFFFFF
>>
>> --
>> With best wishes
>> Dmitry Gapkalov
>
>

On a related note, I'm curious how floating point rounding errors are
going to affect binary operations. I know of at least one emulator
(Dolphin, IIRC) that exposes a raw memory access API to Lua, but
suffers from rounding error - reading address 0x80000020 instead gives
you the value of 0x80000000, etc. I encountered the same problem when
implementing a similar API, and my solution was the HexType patch from
the wiki, but this won't work for everyone, unless 5.2 actually adds
an integer data type.

-- 
Sent from my toaster.