259 {
260 int num = divisor._length;
261 if (dividend._length < num)
262 {
263 return 0u;
264 }
265 int num2 = num - 1;
266 uint num3 = dividend._blocks[num2] / (divisor._blocks[num2] + 1);
267 if (num3 != 0)
268 {
269 int num4 = 0;
270 ulong num5 = 0uL;
271 ulong num6 = 0uL;
272 do
273 {
274 ulong num7 = (ulong)((long)divisor._blocks[num4] * (long)num3) + num6;
275 num6 = num7 >> 32;
276 ulong num8 = (ulong)((long)dividend._blocks[num4] - (long)(uint)num7) - num5;
277 num5 = (num8 >> 32) & 1;
278 dividend._blocks[num4] = (uint)num8;
279 num4++;
280 }
281 while (num4 < num);
282 while (num > 0 && dividend._blocks[num - 1] == 0)
283 {
284 num--;
285 }
286 dividend._length = num;
287 }
288 if (
Compare(ref dividend, ref divisor) >= 0)
289 {
290 num3++;
291 int num9 = 0;
292 ulong num10 = 0uL;
293 do
294 {
295 ulong num11 = (ulong)((long)dividend._blocks[num9] - (long)divisor._blocks[num9]) - num10;
296 num10 = (num11 >> 32) & 1;
297 dividend._blocks[num9] = (uint)num11;
298 num9++;
299 }
300 while (num9 < num);
301 while (num > 0 && dividend._blocks[num - 1] == 0)
302 {
303 num--;
304 }
305 dividend._length = num;
306 }
307 return num3;
308 }
static unsafe int Compare(ref BigInteger lhs, ref BigInteger rhs)