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
|