Hi Damon;

Here's more relevant info.

Code:

```
SUB TEST3()
' ... my code...
mySum1 = 0.0
mySum2 = 0.0
mySum3 = 0.0
FOR I = 1 TO 20000
mySum1 = mySum1 + A(I)*B(I)/C(I)
mySum2 = mySum2 + A(I)*B(I)/C(I) /1000.
mySum3 = mySum3 + A(I)*B(I)/C(I) *1000.
NEXT
Result1 = mySum1
Result2 = mySum2 *1000.
Result3 = mySum3 /1000.
' ...my code...
END SUB
```

Variables: Result1, Result2, Result3, mySum1, mySum2, mySum3, A,B,C are DOUBLE data type.

Values in A,B,C vary from very small to very large, and could be +ve or -ve, in no specific order.

For a typical set of analytical data, the above sample code produces:

...Result1 = 0.9986

.......Result2 = 4.2432

...........Result3 = 2.5388

The specified accuracies in computing the arrays' elements A,B,C are 1.D-8, 5.D-8, 1.D-8 respectively, which are quite reasonable realizing the complexity of the computational methods.

The FOR loop in the above sample code involves multiplication, division, and addition of a wide range of a large number of small and large, +ve and -ve numbers. How the processor handles each two operands at each stage, individually and in combinations, and how the intermediate results are represented and stored (in memory), appear to be at the root of the problem here. (These specialized topics are beyond my understanding of computing!!).

Sure enough, some real numbers of "nearly" same value but opposite sign could possibly be encountered in A*B/C, but should not influence the resulting value in mySum = mySum+A*B/C, provided no unnecessary rounding takes place. The situation is considerably different from an ill-posed or ill-conditioned problem

That said, let me re-phrase the question:

Given one-dimensional arrays A, B, C, each of size N (=20000 to 30000), and values of arrays' elements vary between, say, +/- 1.E-5 and +/- 1.E+5 (i.e.; the value of A*B/C could potentially vary between -1.E-15 and +1.E+15), WHAT IS THE BEST WAY TO PERFORM THE FOLLOWING ARITHMETIC OPERATION WITH MINIMUM ROUND-OFF ERROR ???

Code:

```
mySum = 0.0
FOR I = 1 TO 20000
mySum = mySum + A(I)*B(I)/C(I)
NEXT
Result = mySum
```

Thank you.