lua-users home
lua-l archive

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


spir schrieb:
On Sat, 23 Jan 2010 20:34:39 +0100
spir <denis.spir@free.fr> wrote:

Hello,

Is "maxInt == 1e14-1" true? (found by trying to display -- higher values get exp notation)

PS: Just read at http://stackoverflow.com/questions/945731/what-is-the-maximum-value-of-a-number-in-lua that the mantissa is 52-bit wide. This should allow slightly bigger integers, no? (0xfffffffffffff ~ 4.5035996273705e+15, if I'm right)

Is there any available tool for bigger (accurate) integers / for arbitrary long integers?

I will need integers which width is n*24 bits, where n is not yet known, but for sure >= 3.


Denis
________________________________

la vita e estrany

http://spir.wikidot.com/

In lua/llimits.h you find (a code snippet):
...
00018 /*
00019 ** try to find number of bits in an integer
00020 */
00021 #ifndef BITS_INT
00022 /* avoid overflows in comparison */
00023 #if INT_MAX-20 < 32760
00024 #define BITS_INT        16
00025 #else
00026 #if INT_MAX > 2147483640L
00027 /* machine has at least 32 bits */
00028 #define BITS_INT        32
00029 #else
00030 #error "you must define BITS_INT with number of bits in an integer"
00031 #endif
00032 #endif
00033 #endif
...

So it is clear, that "maxInt == 1e14-1" never can be true!

2^32 = 4294967296, that means you have a limit of 2147483648 in two complement representation (because of the bisectioning of the binary number circle to + and - sign) say a representation of positive numbers 0 to +2147483647 and negative numbers -1 to -2147483648, that is much smaller than the 1e14-1 you expected. From where did you get that huge number? May be you mixed up integer representation and IEEE floating point format?

May be I completely misunderstand your posting and your goal with the equality test? BTW, an equality test with other formats as integer always is eval, better use barriers.
Example:
for (i=0.0; i==1; i+=0.1) {...} - looks fine.

A float representation of 1.0 usually gives 0.99999999 in a bunary representation and 0.999999999 == 1 ? True or false?

Regards BB