Ilya Zakharevich on Thu, 19 Sep 2024 06:31:04 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: A missing (?) function: exponentfp(x) |
On Wed, Sep 18, 2024 at 10:38:09AM +0200, Aurel Page wrote: > ? install("exponentfp","G"); > ? exponentfp(2^30-1) > %2 = 29.999999998656385002 > ? exponentfp(Pi) > %3 = 1.6514961294723207175 > ? z = Pi*2^20 > %4 = 3294198.6583305710348142047482656880163 > ? for(i=1,10^6,exponent(z)) > cpu time = 276 ms, real time = 276 ms. > ? for(i=1,10^6,exponentfp(z)) > cpu time = 312 ms, real time = 312 ms. Hard to tell: on my (more than a decade old, cheap) laptop, the code with exponent() takes 78 ms — but only 15 ms of them is taken by exponent() itself. Rescaling proportionally, this would make exponentfp() twice as slow exponent() — which, if true, would be REALLY GREAT! Thanks! However, to estimate THE REAL power of this, one needs to know the timing of ? for(i=1,10^6,(z)) (but I would redo everything with 10^8 — on some architectures sub-0.1-seconds timing is not fully reliable…)5~ A Lot of Thanks again, Ilya P.S. Looking into the source, it probably does not support non-real types; does it? For best results, it should better propagate better to other types: fold()-by-max() for vectors/etc, fallback-to-exponent() for non-real numeric types (etc?)… (All this is much easier to do from C — comparing to from gp… [Writing from experience! Related: it is a pity that ## — for index-arity — is not yet implemented])