Denis Simon on Mon, 11 Sep 2023 15:38:31 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Power (^) function speed depending on argument types |
Hi Karim and Bill, An increase of 64 bits ??? I find it a little optimistic. I would understand 1 or 2, or up to 14 when I compute 20000 + s (because log_2(i) ~= 14 and log_2(s) ~= 0), but not 64. In the example of Bill precision(Pi) precision(100+Pi) I suspect that the huge increase of precision comes from the hidden digits of Pi ? Otherwise, where would the last digits of 100+Pi come from ? Denis SIMON. ----- Mail original ----- > De: "Karim Belabas" <Karim.Belabas@u-bordeaux.fr> > À: "Denis Simon" <denis.simon@unicaen.fr> > Cc: "pari-users" <pari-users@pari.math.u-bordeaux.fr> > Envoyé: Lundi 11 Septembre 2023 13:56:10 > Objet: Re: Power (^) function speed depending on argument types > Hi Denis, > > actually, the only command that increases the precision there is > the addition s + i; we add to the t_REAL s the t_INT i which has > - infinite accuracy (obviously) > - larger exponent than s after the first few loops > > So the result s + i has a larger precision than s (in fact, the > bitprecision increases by 64 which is the minimal amount), raising that > to the power 1/5 keeps that precision. But the next loop with the new s > increases it again. > > In practice, the precision increases by 64 bits every loop. > > Cheers, > > K.B. > > * Denis Simon [2023-09-11 13:05]: >> Hi, >> >> what we learn with this example, is that the function >> (x) -> x^(1/5) >> can increase the precision of x when x is a t_REAL. >> >> Is it true for all x t_REAL ? >> For which values is this still true, instead of 1/5 ? >> >> Denis SIMON. >> >> ----- Mail original ----- >> > De: "Bill Allombert" <Bill.Allombert@math.u-bordeaux.fr> >> > À: "pari-users" <pari-users@pari.math.u-bordeaux.fr> >> > Envoyé: Dimanche 10 Septembre 2023 23:02:15 >> > Objet: Re: Power (^) function speed depending on argument types >> >> > On Sun, Sep 10, 2023 at 11:40:22PM +0300, Дмитрий Рыбас wrote: >> >> Hi All, >> >> >> >> I observe the following >> >> >> >> ? s=0.0;n=2000;for(i=1,n,s=(s+i)^(1/5)); >> >> *cpu time = 4,148 ms,* real time = 4,148 ms. >> >> ? s=0.0;n=2000;for(i=1,n,s=(s+i+0.0)^(1/5)); >> >> *cpu time = 51 ms,* real time = 51 ms. >> >> ? s=0.0;n=2000;for(i=1,n,s=(s+i)^(0.2)); >> >> *cpu time = 70 ms,* real time = 73 ms. >> >> ? s=0.0;n=2000;for(i=1.0,n,s=(s+i)^(1/5)); >> >> *cpu time = 50 ms,* real time = 49 ms. >> >> ? >> >> >> >> Please advise why the difference in computation time is so drastic? >> > >> > You are not computing s with the same accuracy! >> > >> > ? s=0.0;n=2000;for(i=1,n,s=(s+i)^(1/5));precision(s) >> > %10 = 38281 >> > ? s=0.0;n=2000;for(i=1,n,s=(s+i+0.0)^(1/5));precision(s) >> > %11 = 57 >> > >> > Cheers, >> > Bill. > -- > Pr. Karim Belabas, U. Bordeaux, Vice-président en charge du Numérique > Institut de Mathématiques de Bordeaux UMR 5251 - (+33) 05 40 00 29 77 > http://www.math.u-bordeaux.fr/~kbelabas/