## Re: [xsl] A super-efficient way to compute the sum of A[i] * B[i] for i=1 to n?

 Subject: Re: [xsl] A super-efficient way to compute the sum of A[i] * B[i] for i=1 to n? From: "Michael Kay mike@xxxxxxxxxxxx" Date: Sat, 9 May 2020 13:55:28 -0000
```I doubt you'll find much improvement on this.

You could cut out the call on number() and rely on implicit conversion, but I
doubt it makes any difference.

You could factor out the expressions (\$A/col) and (\$B/col) into variables
declared outside the loop, which might make a difference: finding the Nth
child of an element might well take time proportional to N, whereas finding
the Nth item in a sequence held in a variable is likely to be constant time.
But it depends on the processor, of course. Measgre it and let us know the
results.

A significant part of the cost is likely to be string-to-double conversion,
and there's no way of avoiding that.

Michael Kay
Saxonica

> On 9 May 2020, at 12:59, Costello, Roger L. costello@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Hi Folks,
>
> I need a super-efficient way to compute the sum of A[i] * B[i] for i=1 to
n.
>
> For example, suppose A is this:
>
> <row>
>    <col>0.9</col>
>    <col>0.3</col>
> </row>
>
> and B is this:
>
> <row>
>    <col>0.2</col>
>    <col>0.8</col>
> </row>
>
> I want to compute:
>
> (0.9 * 0.2) + (0.3 * 0.8)
>
> Here's one way to do it:
>
> sum(for \$i in 1 to count(\$A/col) return number(\$A/col[\$i]) *
number(\$B/col[\$i]))
>
> I suspect that is not the most efficient approach.
>
> What is the most efficient approach? I will be doing hundreds of thousands
of these computations, so I want to use the most efficient approach.
>
> /Roger

```