Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: unexpected behaviour of Sum

  • To: mathgroup at smc.vnet.net
  • Subject: [mg126540] Re: unexpected behaviour of Sum
  • From: Dana DeLouis <dana01 at me.com>
  • Date: Fri, 18 May 2012 05:24:04 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com

> Sum[sod[k],{k,10^6}] which gives 27000001 (ok)

Hi.  Just for a mental exercise, this is the best I could do for a non Brute-Force method.
There are probably better ways:

(*
Sum the individual digits between 1 and n
Dana DeLouis
*)


AllDigitSum[n_]:=Module[
{
k,j,fn,fx,lst,w,
dig = IntegerDigits[n]
},

fn[z_]:=Power[10,z-1]*(z*45);
fx[start_,step_,z_]:=1/2 z((z-1) step+2 start);

lst=FoldList[Plus,0,dig];

w=Length[dig];

Sum[
k=Power[10,w-j];
fx[lst[[j]]*k+fn[w-j],k,dig[[j]]],
{j,1,w}]+lst[[-1]]
]


Here, the function f[ ] is the Brute Force looping method as given by your Sum function.


f[1000000] // Timing
{3.78069, 27000001}

AllDigitSum[1000000] //Timing
{0.00026, 27000001}

f[9876543] //Timing
{37.8118, 309922302}

AllDigitSum[9876543] //Timing
{0.000285, 309922302}

= = = = = = = = = =
HTH   :>)
Dana DeLouis
Mac & Math 8
= = = = = = = = = =




On May 14, 1:34 am, perplexed <yudu... at gmail.com> wrote:
> I do not want to say that this is a bug, however I did
> not find, in the Sum documentation, an explanation of this
> behaviour (v8.0.4)
> 
> I defined an innocent function like
> sod[n_]:=Plus@@IntegerDigits[n]
> that compute the sum of the digits of a number.
> (I tried with other functions, so the culprit is not IntegerDigits)
> 
> Then I compute two sums:
> Sum[sod[k],{k,10^6}] which gives 27000001 (ok)
> then
> Sum[sod[k],{k,1+10^6}] which gives 500001500001 (nonsense).
> then
> Sum[sod[k],{k,2,1+10^6}] which gives 27000002 (ok)
> 
> so, it seems to me that Sum has a problem when the iterator
> works in a range greater than 10^6.
> 
> Indeed, I made an experiment:
> I set L={}; and defined
> sod[n_]:=(AppendTo[L,n];Plus@@IntegerDigits[n])
> Then Sum[sod[k],{k,1+10^6}] still gives 500001500001
> and at the end L is equal to {k}, so it seems that
> Sum tried to do something symbolic (??).
> 
> Is this a bug or a feature whose documentation I was not
> able to find? Say, is there an option to fix things ?
> 
> Btw, using ParallelSum instead of Sum works fine (and faster).
> thanks





  • Prev by Date: Re: Coefficient
  • Next by Date: Re: Total least squares with Mathematica?
  • Previous by thread: Re: unexpected behaviour of Sum
  • Next by thread: Total least squares with Mathematica?