Trailing zeros of 100!

Robin Koch robin.koch at t-online.de
Sat Jan 2 19:02:38 EST 2016


Am 02.01.2016 um 22:57 schrieb Chris Angelico:
> On Sun, Jan 3, 2016 at 3:56 AM, Robin Koch <robin.koch at t-online.de> wrote:
>> Am 02.01.2016 um 17:09 schrieb Tony van der Hoff:
>>>
>>> On 02/01/16 16:57, Robin Koch wrote:
>>>>
>>>> sum([int(0.2**k*n) for k in range(1, int(log(n, 5))+1)])
>>>
>>>
>>> But did you actually test it?
>>
>>
>> Yes, should work for n >= 1.
>>
>> Why do you ask?
>
> Your "should work" does not sound good as a response to "actually
> test". Normally I would expect the response to be "Yes, and it worked
> for me" (maybe with a log of an interactive session).

Well, honestly, I trusted my math and didn't thought much about the 
technical limitations.

I only tried values from 1 to 100 and then again 12345, I believe, to 
test the algorithm.

 > Floating point
> can't represent every integer, and above 2**53 you end up able to
> represent only those which are multiples of ever-increasing powers of
> two; 100! is between 2**524 and 2**525, so any float operations are
> going to be rounding off to the nearest 2**471 or thereabouts.
> That's... a lot of rounding. That's like trying to calculate whether
> pi is rational, but basing your calculations on the approximation
> 3.14. :)

When I find more time I take a closer look at it. Thank you (and 
Bernardo) for your clarification. I hope everyone who read my article 
reads yours, too and learns from it. ;-)

-- 
Robin Koch




More information about the Python-list mailing list