On 2017-08-09 18:56, Bob Sneidar via use-livecode wrote:
Btw, I should mention that the way numbers work in LiveCode has become one of my biggest 'pet peeves' over the last year or so. The current way things work is too simplistic really - it hides the very important distinction between 'exact' and 'inexact' numeric representations, for example.

Unfortunately, there's a fair amount of work involved to fix the situation to my satisfaction level - although I think I have a handle on how to do so without hugely adversely affecting general numeric performance. *sigh*

It isn't doing the math that is hard - there are plenty of libraries which do general precision arithmetic. Even standard 'high-school' algorithms work well for reasonable magnitudes and you only really need to get out the big guns - e.g. the Strassen algorithm - for very large numbers, although that scale is relatively common in 'high-end' cryptography settings (factoring large numbers for the purposes of generating keys and such).

The main issue is working out how to do it so that the ability to handle large numeric precision does not impact the performance of the normal sized numeric precision operations. There's also the exact <-> inexact boundary issue too (going from integer/rational -> irrational) - realistically modern processors are only really good at (64-bit) integers, or (64-bit) IEEE floating point values.

What you really want is to use machine sized integers for all computations which don't require anything greater than that (i.e < 64-bits these days) *without* penalty; but still allow code to be written which can handle large integers too. I think I've figured out a reasonable way to do that - but it requires type / range analysis.

The exact / inexact thing is still troublesome though - in other languages 10 means something different from 10.0. Maybe that's actually reasonable, but part of me feels it is a little subtle.

Certainly infinite precision integers would be exceptionally handy - as you also get arbitrary length bitsets like that too (there's an equivalence between dense bitsets and integers, unsurprisingly, you can use the two interchangeably).

In any case, the first step before doing anything in this regard is to do a little bit more work on our 'Number' representation internally - and make the engine abstract through its API for various operations rather than just using +/- etc. directly in the implementation of syntax - then we would be able to more easily experiment with internal representations.

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

Reply via email to