1336 {
1337 int num = 0;
1342 if (hasUnequalMargins)
1343 {
1345 if (exponent > 0)
1346 {
1348 lhs.ShiftLeft((uint)exponent);
1351 BigInteger.Pow2((uint)(exponent + 1), out result2);
1352 }
1353 else
1354 {
1356 BigInteger.Pow2((uint)(-exponent + 2), out rhs);
1359 }
1360 ptr = &result2;
1361 }
1362 else
1363 {
1364 if (exponent > 0)
1365 {
1367 lhs.ShiftLeft((uint)exponent);
1370 }
1371 else
1372 {
1374 BigInteger.Pow2((uint)(-exponent + 1), out rhs);
1376 }
1377 ptr = &result;
1378 }
1379 int num2 = (int)Math.Ceiling((double)((int)mantissaHighBitIdx + exponent) * 0.3010299956639812 - 0.69);
1380 if (num2 > 0)
1381 {
1382 rhs.MultiplyPow10((uint)num2);
1383 }
1384 else if (num2 < 0)
1385 {
1386 BigInteger.Pow10((uint)(-num2), out var result3);
1388 result.Multiply(ref result3);
1389 if (ptr != &result)
1390 {
1392 }
1393 }
1394 bool flag = mantissa % 2 == 0;
1395 bool flag2 = false;
1396 if (cutoffNumber == -1)
1397 {
1400 flag2 = (flag ? (num3 >= 0) : (num3 > 0));
1401 }
1402 else
1403 {
1405 }
1406 if (flag2)
1407 {
1408 num2++;
1409 }
1410 else
1411 {
1412 lhs.Multiply10();
1413 result.Multiply10();
1414 if (ptr != &result)
1415 {
1417 }
1418 }
1419 int num4 = num2 -
buffer.Length;
1420 if (cutoffNumber != -1)
1421 {
1422 int num5 = 0;
1423 num5 = ((!isSignificantDigits) ? (-cutoffNumber) : (num2 - cutoffNumber));
1424 if (num5 > num4)
1425 {
1426 num4 = num5;
1427 }
1428 }
1429 num2 = (decimalExponent = num2 - 1);
1430 uint block = rhs.GetBlock((uint)(rhs.GetLength() - 1));
1431 if (block < 8 || block > 429496729)
1432 {
1434 uint shift = (59 - num6) % 32;
1435 rhs.ShiftLeft(shift);
1436 lhs.ShiftLeft(shift);
1437 result.ShiftLeft(shift);
1438 if (ptr != &result)
1439 {
1441 }
1442 }
1443 bool flag3;
1444 bool flag4;
1445 uint num7;
1446 if (cutoffNumber == -1)
1447 {
1448 while (true)
1449 {
1450 num7 =
BigInteger.HeuristicDivide(ref lhs, ref rhs);
1454 if (flag)
1455 {
1456 flag3 = num8 <= 0;
1457 flag4 = num9 >= 0;
1458 }
1459 else
1460 {
1461 flag3 = num8 < 0;
1462 flag4 = num9 > 0;
1463 }
1464 if (flag3 || flag4 || num2 == num4)
1465 {
1466 break;
1467 }
1468 buffer[num] = (byte)(48 + num7);
1469 num++;
1470 lhs.Multiply10();
1471 result.Multiply10();
1472 if (ptr != &result)
1473 {
1475 }
1476 num2--;
1477 }
1478 }
1479 else
1480 {
1481 if (num2 < num4)
1482 {
1483 num7 =
BigInteger.HeuristicDivide(ref lhs, ref rhs);
1484 if (num7 > 5 || (num7 == 5 && !lhs.IsZero()))
1485 {
1486 decimalExponent++;
1487 num7 = 1u;
1488 }
1489 buffer[num] = (byte)(48 + num7);
1490 return (uint)(num + 1);
1491 }
1492 flag3 = false;
1493 flag4 = false;
1494 while (true)
1495 {
1496 num7 =
BigInteger.HeuristicDivide(ref lhs, ref rhs);
1497 if (lhs.IsZero() || num2 <= num4)
1498 {
1499 break;
1500 }
1501 buffer[num] = (byte)(48 + num7);
1502 num++;
1503 lhs.Multiply10();
1504 num2--;
1505 }
1506 }
1507 bool flag5 = flag3;
1508 if (flag3 == flag4)
1509 {
1510 lhs.ShiftLeft(1u);
1512 flag5 = num10 < 0;
1513 if (num10 == 0)
1514 {
1515 flag5 = (num7 & 1) == 0;
1516 }
1517 }
1518 if (flag5)
1519 {
1520 buffer[num] = (byte)(48 + num7);
1521 num++;
1522 }
1523 else if (num7 == 9)
1524 {
1525 while (true)
1526 {
1527 if (num == 0)
1528 {
1530 num++;
1531 decimalExponent++;
1532 break;
1533 }
1534 num--;
1536 {
1538 num++;
1539 break;
1540 }
1541 }
1542 }
1543 else
1544 {
1545 buffer[num] = (byte)(48 + num7 + 1);
1546 num++;
1547 }
1548 return (uint)num;
1549 }
static int Log2(uint value)
static int Compare(BigInteger left, BigInteger right)
static BigInteger Multiply(BigInteger left, BigInteger right)
static BigInteger Add(BigInteger left, BigInteger right)