On 2017-08-09 18:14, Mark Wieder via use-livecode wrote:
Oops. OK - point sheepishly taken. Is that the definition of integer in the dictionary? The "integer" entry just says "if the value contains digits (and an optional minus sign) and no other characters, it is an integer", which is as simplisitic a definition as the entry for "hex".
Technically an integer is a number which has no fractional part... So that definition is mostly correct (10e100 is also an integer - just a very large one).
The 'problem' in LC is that numbers are internally represented as doubles. Technically doubles can hold integer values up to 2^53-1 faithfully - any larger than that (like 10e100) then they cease to be exact (as the magnitude increases, so do the number of values which are represented the same way).
But what annoys me isn't the fact that baseconvert, etc (bitXor is the one that bit me) only work on integers less than 2^32. It's more the fact that the input data was crunched down to something the functions could handle, and then give me the wrong result with no warning.
We certainly could make all operations which only work *exclusively* on integers (bit*) throw an error when out of bounds (and extend them to 2^53-1 max), but the engine never has so this comes with a backwards-compatibility risk - perhaps one we should consider though.
The arithmetic operations are not possible to bounds-check in this way as you get a 'graceful' degradation of precision when using them.
I'm pretty sure BaseConvert could be made to be an entirely string->string operation as I said previously - not having any bounds limit at all... Although you'd still not be able to do something like base2 -> base10, bit operations, base10 -> base2 if your bit sequence > 52 bits long. So how worth-while that is, I'm not sure.
Warmest Regards, Mark. -- Mark Waddingham ~ m...@livecode.com ~ http://www.livecode.com/ LiveCode: Everyone can create apps _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode