Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ operator double()

static System.Xml.Xsl.XPathConvert.BigNumber.operator double ( BigNumber bn)
inlineexplicitstatic

Definition at line 398 of file XPathConvert.cs.

399 {
400 int num = bn._exp + 1022;
401 if (num >= 2047)
402 {
403 return double.PositiveInfinity;
404 }
405 uint u;
406 uint u2;
407 uint num2;
408 if (num > 0)
409 {
410 u = (uint)(num << 20) | ((bn._u2 & 0x7FFFFFFF) >> 11);
411 u2 = (bn._u2 << 21) | (bn._u1 >> 11);
412 num2 = (bn._u1 << 21) | NotZero(bn._u0);
413 }
414 else if (num > -20)
415 {
416 int num3 = 12 - num;
417 u = bn._u2 >> num3;
418 u2 = (bn._u2 << 32 - num3) | (bn._u1 >> num3);
419 num2 = (bn._u1 << 32 - num3) | NotZero(bn._u0);
420 }
421 else if (num == -20)
422 {
423 u = 0u;
424 u2 = bn._u2;
425 num2 = bn._u1 | ((bn._u0 != 0) ? 1u : 0u);
426 }
427 else if (num > -52)
428 {
429 int num4 = -num - 20;
430 u = 0u;
431 u2 = bn._u2 >> num4;
432 num2 = (bn._u2 << 32 - num4) | NotZero(bn._u1) | NotZero(bn._u0);
433 }
434 else
435 {
436 if (num != -52)
437 {
438 return 0.0;
439 }
440 u = 0u;
441 u2 = 0u;
442 num2 = bn._u2 | NotZero(bn._u1) | NotZero(bn._u0);
443 }
444 if ((num2 & 0x80000000u) != 0 && ((num2 & 0x7FFFFFFFu) != 0 || (u2 & (true ? 1u : 0u)) != 0) && AddU(ref u2, 1u) != 0)
445 {
446 AddU(ref u, 1u);
447 }
448 return BitConverter.UInt64BitsToDouble(((ulong)u << 32) | u2);
449 }
static uint NotZero(uint u)
static uint AddU(ref uint u1, uint u2)

References System.Xml.Xsl.XPathConvert.AddU(), System.Xml.Dictionary, System.Xml.Xsl.XPathConvert.NotZero(), and System.BitConverter.UInt64BitsToDouble().