Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ operator double()

static System.Xml.Xsl.XPathConvert.FloatingDecimal.operator double ( FloatingDecimal dec)
inlineexplicitstatic

Definition at line 1382 of file XPathConvert.cs.

1383 {
1384 int mantissaSize = dec._mantissaSize;
1385 int num = dec._exponent - mantissaSize;
1386 double num3;
1387 if (mantissaSize <= 15 && num >= -22 && dec._exponent <= 37)
1388 {
1389 if (mantissaSize <= 9)
1390 {
1391 uint num2 = 0u;
1392 for (int i = 0; i < mantissaSize; i++)
1393 {
1394 num2 = num2 * 10 + dec[i];
1395 }
1396 num3 = num2;
1397 }
1398 else
1399 {
1400 num3 = 0.0;
1401 for (int j = 0; j < mantissaSize; j++)
1402 {
1403 num3 = num3 * 10.0 + (double)(int)dec[j];
1404 }
1405 }
1406 if (num > 0)
1407 {
1408 if (num > 22)
1409 {
1410 num3 *= C10toN[num - 22];
1411 num3 *= C10toN[22];
1412 }
1413 else
1414 {
1415 num3 *= C10toN[num];
1416 }
1417 }
1418 else if (num < 0)
1419 {
1420 num3 /= C10toN[-num];
1421 }
1422 }
1423 else if (dec._exponent >= 310)
1424 {
1425 num3 = double.PositiveInfinity;
1426 }
1427 else if (dec._exponent <= -325)
1428 {
1429 num3 = 0.0;
1430 }
1431 else
1432 {
1433 BigNumber bigNumber = new BigNumber(dec);
1434 if (bigNumber.Error == 0)
1435 {
1436 num3 = (double)bigNumber;
1437 }
1438 else
1439 {
1440 BigNumber bigNumber2 = bigNumber;
1441 bigNumber2.MakeUpperBound();
1442 BigNumber bigNumber3 = bigNumber;
1443 bigNumber3.MakeLowerBound();
1444 num3 = (double)bigNumber2;
1445 double num4 = (double)bigNumber3;
1446 if (num3 != num4)
1447 {
1448 num3 = dec.AdjustDbl((double)bigNumber);
1449 }
1450 }
1451 }
1452 if (dec._sign >= 0)
1453 {
1454 return num3;
1455 }
1456 return 0.0 - num3;
1457 }
static readonly double[] C10toN

References System.Xml.Xsl.XPathConvert.C10toN, System.Xml.Dictionary, System.Xml.Xsl.XPathConvert.BigNumber.MakeLowerBound(), and System.Xml.Xsl.XPathConvert.BigNumber.MakeUpperBound().