[Thread Prev][Thread Next][Index]

Re: [ferret_users] @sum bug ?

Ansley Manke a écrit :
Hi Patrick,
I really think this is a precision issue. The numbers involved are down near the limit of single-precision accuracy. The source code for the sum operation has never been changed, since Ferret was first written. Note that the difference between 2526427.250 and 2526434.500 are in the 6th decimal place, and both would be rounded off to 2526430. at a precision of 6 decimal places. Single-precision variables are really only this accurate, to 6 or 7 decimal places. I have to conclude that the differences in the results from one Ferret executable to another are due to slight changes in the way Ferret is compiled and linked.

The reason that the sums of var and xsequence(var) differ somewhat is again because of computational accuracy. When computing the sum of the multi-dimensioned variable, the sum over x is first computed, leaving a variable in y, then that is summed over y. When the one-dimensional variable's sum is computed, that is done in just one step, so there's just a bit of a difference in the way the numbers are added up. We're looking into the possibility of changing the summation routines to make the results of the two computations consistent and perhaps more accurate.
Indeed your analysis of the problem seems correct : it is a precision issue.
This poor precision on a sum operation gives of course error on a mean too.
More than 1E-4 between a mean calculated from ncap2 and ferret.
I would really like that all internal calculations be casted to double precision float
then be written as float.

Here the test you can do from

Then calculate a sum (total) and a mean (avg) with ncap2
$ ncap2 -Oh -s 'tas_mean=tas.avg($lat,$lon); tas_sum=tas.total($lat,$lon)' tas_day_IPSL-CM5A-LR_piControl_r1i1p1_extract.nc tyty.nc

Then compare results in a ferret session (Linux 6.64 X86_64):

$ ferret
yes? use tyty.nc
yes? list tas_sum-tas[i=@sum,j=@sum], tas_mean-tas[i=@sum,j=@sum]/tas[i=@ngd,j=@ngd]
            DATA SET: ./tyty.nc
IPSL-CM5A-LR model output prepared for CMIP5 pre-industrial control
            TIME: 01-JAN-1800 00:00 to 11-APR-1800 00:00 NOLEAP
            LONGITUDE: 1.9W(-1.9) to 1.9W
            LATITUDE: 90S to 90N
Column  1: EX#1 is TAS_SUM-TAS[I=@SUM,J=@SUM]
Column  2: EX#2 is TAS_MEAN-TAS[I=@SUM,J=@SUM]/TAS[I=@NGD,J=@NGD]
                      EX#1     EX#2
01-JAN-1800 12 /   1:   7.25  0.000793
02-JAN-1800 12 /   2:   9.75  0.001068
03-JAN-1800 12 /   3:  -6.25 -0.000671
04-JAN-1800 12 /   4:  11.75  0.001282
05-JAN-1800 12 /   5: -11.50 -0.001251
06-JAN-1800 12 /   6:   3.50  0.000397
07-JAN-1800 12 /   7:   9.00  0.000977
08-JAN-1800 12 /   8:  -7.50 -0.000824
09-JAN-1800 12 /   9:  -7.50 -0.000793
10-JAN-1800 12 /  10:  -8.50 -0.000916
11-JAN-1800 12 /  11:  -4.50 -0.000488
12-JAN-1800 12 /  12:   9.50  0.001007
13-JAN-1800 12 /  13: -13.75 -0.001495
14-JAN-1800 12 /  14:  12.00  0.001312


Data Analysis and Visualization Engineer
IPSL Global Climate Modelling Group

[Thread Prev][Thread Next][Index]

Contact Us
Dept of Commerce / NOAA / OAR / PMEL / TMAP

Privacy Policy | Disclaimer | Accessibility Statement