@@ -2865,15 +2865,6 @@ dl_zero()
2865
2865
{
2866
2866
return (DoubleLength ) {0.0 , 0.0 };
2867
2867
}
2868
-
2869
- static inline DoubleLength
2870
- dl_split (double x ) {
2871
- double t = x * 134217729.0 ; /* Veltkamp constant = float(0x8000001) */
2872
- double hi = t - (t - x );
2873
- double lo = x - hi ;
2874
- return (DoubleLength ) {hi , lo };
2875
- }
2876
-
2877
2868
static inline DoubleLength
2878
2869
dl_add (DoubleLength total , double x )
2879
2870
{
@@ -2888,12 +2879,24 @@ dl_add(DoubleLength total, double x)
2888
2879
}
2889
2880
2890
2881
static inline DoubleLength
2891
- dl_mul (double p , double q )
2882
+ dl_split (double x ) {
2883
+ double t = x * 134217729.0 ; /* Veltkamp constant = float(0x8000001) */
2884
+ double hi = t - (t - x );
2885
+ double lo = x - hi ;
2886
+ return (DoubleLength ) {hi , lo };
2887
+ }
2888
+
2889
+ static inline DoubleLength
2890
+ dl_mul (double x , double y )
2892
2891
{
2893
- DoubleLength pp = dl_split (p );
2894
- DoubleLength qq = dl_split (q );
2895
- DoubleLength product = {pp .hi * qq .hi , pp .lo * qq .lo };
2896
- return dl_add (product , pp .hi * qq .lo + pp .lo * qq .hi );
2892
+ /* Dekker mul12(). Section (5.12) */
2893
+ DoubleLength xx = dl_split (x );
2894
+ DoubleLength yy = dl_split (y );
2895
+ double p = xx .hi * yy .hi ;
2896
+ double q = xx .hi * yy .lo + xx .lo * yy .hi ;
2897
+ double z = p + q ;
2898
+ double zz = p - z + q + xx .lo * yy .lo ;
2899
+ return (DoubleLength ) {z , zz };
2897
2900
}
2898
2901
2899
2902
static inline DoubleLength
0 commit comments