| Karim Belabas on Wed, 27 Oct 2021 18:57:09 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: sqrtint() on non-integer arguments |
> On Mon, Oct 25, 2021 at 5:02 PM Max Alekseyev <maxale@gmail.com> wrote:
>> sqrtint() does not accept non-integer arguments such as t_REAL or t_FRAC.
>> I think it'd be helpful if it did so, which is easy to archive by calling
>> floor() before performing actual computation. I believe it used to work
>> like this a while ago, but not anymore.
>>
>> Same applies to sqrtnint().
>
* Charles Greathouse [2021-10-25 23:41]:
> This would be useful to me and should be trivial to implement (a single
> call to gfloor, change gp2c type from int to mp).
Not too hard but not quite trivial because you also want to avoid
? sqrtint(floor(1e40))
*** at top-level: sqrtint(floor(1e40))
*** ^------------
*** floor: precision too low in truncr (precision loss in truncation).
and get instead
? sqrtint(1e40)
%1 = 100000000000000000000
And you also need to make sure that things like
? sqrtint(9/4,&r)
%2 = 1
? r
%3 = 5/4
? logint(3 + 2*quadgen(17), 3, &r)
%4 = 1
? r
%5 = 3
work as expected.
Anyway, it's done in the 'master' branch for sqrtint / sqrtnint / logint :-)
Please test and report unexpected behaviour !
Cheers,
K.B.
--
Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17
Universite de Bordeaux Fax: (+33) (0)5 40 00 21 23
351, cours de la Liberation http://www.math.u-bordeaux.fr/~kbelabas/
F-33405 Talence (France) http://pari.math.u-bordeaux.fr/ [PARI/GP]
`