On 14/04/2016 09:13, blindanag...@nowhere.net wrote:
> On 14/04/2016 08:59, blindanag...@nowhere.net wrote:
>> On 14/04/2016 07:52, ast wrote:
> 
>> This means that the result will be correct provided it has 53 or less
>> bits - just short of 16 decimal digits (i.e for square numbers with less
>> than 32 digits).
>>
>> With an integer square root function (isqrt), this program:
>>
>> for exp in count(20):
>>   v = 2 ** exp - 1
>>   if isqrt(v) != sqrt(v):
>>     print(exp, isqrt(v), sqrt(v))
>>     break
>>
>> terminates with:
>>
>>   54 18014398509481983 1.8014398509481982e+16
>>
>> showing a first error for a 54 bit square root
>>
> I should also have said that the square root of integer squares with
> between 15 and 30 decimal digits will only be correct if the square
> numbers themselves are exactly representable in 53 bits.  So we can
> expect failures for squares with 16 or more digits.

However, if a number with 31 or less digits is known to be the square of
an integer, the IEEE754 sqrt function will (I believe) give the correct
result.

-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to