Lines Matching refs:len

43   DCHECK(Z.len() > V.len());
44 DCHECK(V.len() > 0);
45 DCHECK(scratch.len() >= 2 * V.len());
46 int n = V.len();
62 // Computes the inverse of V, shifted by kDigitBits * 2 * V.len, accurate to
63 // V.len+1 digits. The V.len low digits of the result digits will be written
65 // Needs InvertNewtonScratchSpace(V.len) of scratch space.
71 const int vn = V.len();
72 DCHECK(Z.len() >= vn);
73 DCHECK(scratch.len() >= InvertNewtonScratchSpace(vn));
79 DCHECK(V.len() >= 3);
83 DCHECK(V.len() > kBasecasePrecision);
106 // From now on, we'll keep Z.len updated to the part that's already computed.
114 RWDigits S(scratch, kSOffset, 2 * Z.len());
122 int t_len = std::min(V.len(), fraction_digits);
123 Digits T(V, V.len() - t_len, t_len);
128 RWDigits U(scratch, kUOffset, S.len() + T.len());
129 DCHECK(U.len() > fraction_digits);
132 U = U + (U.len() - (1 + fraction_digits));
137 DCHECK(U.len() >= Z.len());
138 RWDigits W(scratch, kWOffset, U.len());
139 int padding_digits = U.len() - Z.len();
147 if (U.len() <= vn) {
151 Z.set_len(U.len());
162 Digits W_part(W, W.len() - vn - 1, vn);
163 Digits U_part(U, U.len() - vn - 1, vn);
171 for (int i = 0; i < Z.len(); i++) Z[i] = ~digit_t{0};
181 // Computes the inverse of V, shifted by kDigitBits * 2 * V.len, accurate to
182 // V.len+1 digits. The V.len low digits of the result digits will be written
186 // Needs InvertScratchSpace(V.len) digits of scratch space.
188 DCHECK(Z.len() > V.len());
189 DCHECK(V.len() >= 1);
191 DCHECK(scratch.len() >= InvertScratchSpace(V.len()));
193 int vn = V.len();
214 // Needs DivideBarrettScratchSpace(A.len) scratch space.
217 DCHECK(Q.len() > A.len() - B.len());
218 DCHECK(R.len() >= B.len());
219 DCHECK(A.len() > B.len()); // Careful: This is *not* '>=' !
220 DCHECK(A.len() <= 2 * B.len());
221 DCHECK(B.len() > 0);
223 DCHECK(I.len() == A.len() - B.len());
224 DCHECK(scratch.len() >= DivideBarrettScratchSpace(A.len()));
226 int orig_q_len = Q.len();
228 // (1): A1 = A with B.len fewer digits.
229 Digits A1 = A + B.len();
230 DCHECK(A1.len() == I.len());
232 // (2): Q = A1*I with I.len fewer digits.
235 RWDigits K(scratch, 0, 2 * I.len());
238 Q.set_len(I.len() + 1);
239 Add(Q, K + I.len(), A1);
243 RWDigits P(scratch, 0, A.len() + 1);
246 digit_t borrow = SubtractAndReturnBorrow(R, A, Digits(P, 0, B.len()));
248 for (int i = B.len(); i < R.len(); i++) R[i] = 0;
249 digit_t r_high = A[B.len()] - P[B.len()] - borrow;
274 int final_q_len = Q.len();
281 DCHECK(Q.len() > A.len() - B.len());
282 DCHECK(R.len() >= B.len());
283 DCHECK(A.len() > B.len()); // Careful: This is *not* '>=' !
284 DCHECK(B.len() > 0);
298 int barrett_dividend_length = A.len() <= 2 * B.len() ? A.len() : 2 * B.len();
299 int i_len = barrett_dividend_length - B.len();
305 Invert(I, Digits(B, B.len() - i_len, i_len), scratch);
308 DCHECK(I.len() == i_len);
309 if (A.len() > 2 * B.len()) {
312 int n = B.len(); // Chunk length.
314 int t = DIV_CEIL(A.len(), n);
332 int to_copy = std::min(qi_len, target.len());
334 for (int j = to_copy; j < target.len(); j++) target[j] = 0;
336 for (int j = to_copy; j < Qi.len(); j++) {
355 DCHECK(Ri.len() <= R.len());