private void InitDecHexDigits (uint hi, ulong lo)
{
if (hi == 0) {
InitDecHexDigits (lo); // Only the lower 64 bits matter.
return;
}
// Compute (hi, lo) = (hi , lo) / HundredMillion.
uint divhi = hi / HundredMillion;
ulong remhi = hi - divhi * HundredMillion;
ulong divlo = lo / HundredMillion;
ulong remlo = lo - divlo * HundredMillion + remhi * ULongModHundredMillion;
hi = divhi;
lo = divlo + remhi * ULongDivHundredMillion;
divlo = remlo / HundredMillion;
remlo -= divlo * HundredMillion;
lo += divlo;
_val1 = ToDecHex ((int)remlo);
// Divide hi * 2 ^ 64 + lo by HundredMillion using the fact that
// hi < HundredMillion.
divlo = lo / HundredMillion;
remlo = lo - divlo * HundredMillion;
lo = divlo;
if (hi != 0) {
lo += hi * ULongDivHundredMillion;
remlo += hi * ULongModHundredMillion;
divlo = remlo / HundredMillion;
lo += divlo;
remlo -= divlo * HundredMillion;
}
_val2 = ToDecHex ((int)remlo);
// Now we are left with 64 bits store in lo.
if (lo >= HundredMillion) {
divlo = lo / HundredMillion;
lo -= divlo * HundredMillion;
_val4 = ToDecHex ((int)divlo);
}
_val3 = ToDecHex ((int)lo);
}