| Ilya Zakharevich on Mon, 16 Sep 2024 19:43:29 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: A missing (?) function: exponentfp(x) |
On Sat, Sep 14, 2024 at 12:31:57PM +0200, Loïc Grenié wrote:
> In gp you can cheat
>
> ? install(dbllog2,lG);
> ? install(dbltor,L);
> ? flog2(x)=dbltor(dbllog2(x));
> ? my(il2=1/log(2));setrand(1);for(i=1,10^6,log(random(1.)<<4)*il2)
> cpu time = 3,868 ms, real time = 3,868 ms.
> ? setrand(1);for(i=1,10^6,flog2(random(1.)<<4))
> cpu time = 655 ms, real time = 656 ms.
Moreover, on my CPU, exponent() is 400 times quicker than
log()/log(2). So your 5x speedup is still “more or less negligible”!
(A partial aside:
In my vita, for a smooth user experience, there is an important
aspect which is almost universally overlooked. I prefer to call it
“gradual degradation”.
For example, people often advocate as the preferred target to aim at:
• It should be possible to be able to code the “required things”.
• It should be simple to code the simple “required things”.
With “gradual degradation”, one (or ≥1) more requirements appears:
• It should be only moderately hard to code “required things”
which are moderately hard.
Without this, what usually happens is an almost insurmountable
obstacle:
∘ as a test, you code something simple. It works!
∘ then you want to do more — but the amount of extra work to make
even a small step forward is formidable. You give up!
I would say that for a smooth progression, the coefficient should
be about 3: the next step in the ladder should not require “more
than 3x the effort” of the previous one.)
Following this, I would think that having a flavor of exponent() which
is at most 3x slower (but gives a continuous/or/C¹/or/piecewise-quadratic
approximation to log2()) may be beneficial in many situations.
Hope this helps,
Ilya