Jack Brennen on Wed, 24 Apr 2013 01:41:38 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Surprising behaviour of sqrt() on squares of integers |
By the way, if you want a function that returns an integer when possible and a real when not possible, you can roll your own in one line (assumes the input is a non-negative INT or a REAL): ? mysqrt(x) = if(issquare(x),sqrtint(x),sqrt(x)) ? for(x=0,10,print([x,mysqrt(x)])) [0, 0] [1, 1] [2, 1.4142135623730950488016887242096980786] [3, 1.7320508075688772935274463415058723670] [4, 2] [5, 2.2360679774997896964091736687312762354] [6, 2.4494897427831780981972840747058913920] [7, 2.6457513110645905905016157536392604257] [8, 2.8284271247461900976033774484193961571] [9, 3] [10, 3.1622776601683793319988935444327185337] On 4/23/2013 4:37 PM, Jack Brennen wrote:
I thought that the behavior was that sqrt() of a non-negative integer or real returns a real, and sqrtint() of a non-negative integer returns an integer. Both of your examples work fine with sqrtint(): ? Mod(5,sqrtint(9)) Mod(2, 3) ? sqrtint(2^256) 340282366920938463463374607431768211456 ? 2^128 340282366920938463463374607431768211456 On 4/23/2013 4:31 PM, Richard in Reading wrote:This is just a toy example but there are other real situation where it's annoying that PARI doesn't recognize when you want to take a square root of the square of an integer and return an integer. Is there some justification for this or is it worth me reporting it as a bug. ? Mod(5,sqrt(9)) *** at top-level: Mod(5,sqrt(denominat *** ^-------------------- *** Mod: forbidden division t_INT % t_REAL. *** Break loop: type 'break' to go back to GP ? sqrt(2^256) %17 = 3.4028236692093846346337460743176821146 E38 ? 2^128 %18 = 340282366920938463463374607431768211456 The above should return the same value in my opinion. Richard Heylen