fn double_accumulate(u: f64, v: f64, x: f64) -> (f64, f64, f64)Examples found in repository?
crates/competitive/src/num/quad_double.rs (line 145)
127 fn add(self, rhs: Self) -> Self::Output {
128 let mut x = [0.; 8];
129 let (mut i, mut j, mut k) = (0, 0, 0);
130 while k < 8 {
131 if j >= 4 || i < 4 && self[i].abs() > rhs[j].abs() {
132 x[k] = self[i];
133 i += 1;
134 } else {
135 x[k] = rhs[j];
136 j += 1;
137 }
138 k += 1;
139 }
140
141 let (mut u, mut v) = (0., 0.);
142 let (mut k, mut i) = (0, 0);
143 let mut c = [0.; 4];
144 while k < 4 && i < 8 {
145 let tpl = double_accumulate(u, v, x[i]);
146 let s = tpl.0;
147 u = tpl.1;
148 v = tpl.2;
149 if s != 0. {
150 c[k] = s;
151 k += 1;
152 }
153 i += 1;
154 }
155 if k < 2 {
156 c[k + 1] = v;
157 }
158 if k < 3 {
159 c[k] = u;
160 }
161 Self::renormalize(c[0], c[1], c[2], c[3], 0.)
162 }