17
$\begingroup$

Times and Plus have the same grammar, and so do Product and Sum. So is there a function doing multiplication that has the same grammar as Total does then?

If yes, what is it? If no, why?


Now I learn from @AntonAntonov that there is less need to design a ListProduct function. So this indicates that multiplication and addition cannot be treated on the same footing.


About "duplicate": I think not. Because my question is not aimed at finding how, but at why.

About "off-topic": I think it constructive to make some of the design "philosophy" behind clearer to facilitate deeper understanding.

$\endgroup$
5
  • 1
    $\begingroup$ Related prior MSE thread $\endgroup$ – Daniel Lichtblau Apr 21 '18 at 15:58
  • 1
    $\begingroup$ Possible duplicate of Most Efficient Way to Calculate the Product of All Items in a List? $\endgroup$ – MarcoB Apr 21 '18 at 18:13
  • 1
    $\begingroup$ How about prod = Apply[Times]? prod[{1,2,3,4}] --> 24. $\endgroup$ – Szabolcs Apr 22 '18 at 17:36
  • $\begingroup$ Also Fold[Times], which can be faster than Apply[Times] on packed arrays. And Tr[#, Times] &. although Tr is slightly slower than Apply. $\endgroup$ – Michael E2 Apr 22 '18 at 18:20
  • $\begingroup$ Um, "If yes, what is it?" seems "aimed at finding how." And, it seems to me, that many if not most users who ask "why?" are really interested in "how?", judging by which answer they accept. Of course, (1) you're not most users, just one, and (2) I'm not voting to close anyway. $\endgroup$ – Michael E2 Apr 23 '18 at 3:20
29
$\begingroup$

In addition to the previous answer...

I designed and implemented Total 17 years ago. Its first version was named ListSum. The primary reason for ListSum's implementation was to encapsulate the functionalities dealing with error accumulation while summing a list of numbers. (A well known phenomena in, say, numerical solvers for ODE's.)

Of course, I also considered ListProduct, having analogous functionality. But there was not really a strong reason or use case for it.

(During the final design phase Stephen Wolfram renamed ListSum to Total.)


@tomd

My memory of things is that before Total, Tr@lst was considered faster than Plus@@lst if lst was a packed array, an observation Ted Ersek attributes to Rob Knapp

Rob Knapp was supervising my work on the Total project.

$\endgroup$
3
  • 1
    $\begingroup$ Thanks for the historical context! $\endgroup$ – Henrik Schumacher Apr 22 '18 at 0:28
  • 1
    $\begingroup$ @HenrikSchumacher Thanks, I thought it might be of interest... $\endgroup$ – Anton Antonov Apr 22 '18 at 14:14
  • 1
    $\begingroup$ @AntonAntonov I think it interesting too. $\endgroup$ – Αλέξανδρος Ζεγγ Apr 22 '18 at 14:28
13
$\begingroup$

Total is different from Plus@@ because it uses tricks to minimize round-off error. It is thus a useful addition to the toolkit. Times@@ doesn't suffer from the problem, so no similar function is needed.

$\endgroup$
7
  • 1
    $\begingroup$ Could you please give a concrete example demonstrating that, concerning to round-off errors, Total and Plus@@ are different? $\endgroup$ – Αλέξανδρος Ζεγγ Apr 21 '18 at 16:07
  • 1
    $\begingroup$ I prefer to state it as Apply[Plus] rather than the syntax Plus@@, because Apply[Plus] is actually a function now that we're in the brave new curried world! $\endgroup$ – Patrick Stevens Apr 21 '18 at 16:09
  • 3
    $\begingroup$ @ΑλέξανδροςΖεγγ See the documentation of Total, section Examples->Options->Method. $\endgroup$ – Anton Antonov Apr 21 '18 at 16:10
  • 2
    $\begingroup$ My memory of things is that before Total, Tr@lst was considered faster than Plus@@lst if lst was a packed array, an observation Ted Ersek attributes to Rob Knapp $\endgroup$ – user1066 Apr 21 '18 at 17:39
  • 2
    $\begingroup$ @ΑλέξανδροςΖεγγ Related: (103771), (145019) $\endgroup$ – Michael E2 Apr 21 '18 at 18:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.