//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- for (var numDigitsAfterDecimal = -1; numDigitsAfterDecimal <= 2; ++numDigitsAfterDecimal) { for (var lastDigit = 0; lastDigit <= (numDigitsAfterDecimal <= 0 ? 0 : 1); ++lastDigit) { for (var numDigits = 20; numDigits <= 23; ++numDigits) { var s = generateNumberString(numDigits - Math.max(0, numDigitsAfterDecimal), numDigitsAfterDecimal, lastDigit); echo(numDigits + " digits"); echo(s); echo(eval(s).toString()); echo(""); } } } function generateNumberString(numDigitsBeforeDecimal, numDigitsAfterDecimal, lastDigit) { if (numDigitsBeforeDecimal < 1) throw new Error("Invalid numDigits"); var useDecimal = numDigitsAfterDecimal >= 0; if (numDigitsAfterDecimal < 0) numDigitsAfterDecimal = 0; var s = "1"; for (var i = 1; i < numDigitsBeforeDecimal; ++i) s += "0"; if (useDecimal) s += "."; if (numDigitsAfterDecimal !== 0) { for (var i = 0; i < numDigitsAfterDecimal - 1; ++i) s += "0"; s += lastDigit; } return s; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function toString(o, quoteStrings) { switch (o) { case null: case undefined: return "" + o; } switch (typeof o) { case "boolean": case "number": { var s = "" + o; var e = s.indexOf("e"); for (var i = (e == -1 ? s.length : e) - 3; i > 0; i -= 3) s = s.substring(0, i) + "," + s.substring(i); return s; } case "string": { var hex = "0123456789abcdef"; var s = ""; for (var i = 0; i < o.length; ++i) { var c = o.charCodeAt(i); if (c === 0) s += "\\0"; else if (c >= 0x20 && c < 0x7f) s += quoteStrings && o.charAt(i) === "\"" ? "\\\"" : o.charAt(i); else if (c <= 0xff) s += "\\x" + hex.charAt((c >> 4) & 0xf) + hex.charAt(c & 0xf); else s += "\\u" + hex.charAt((c >> 12) & 0xf) + hex.charAt((c >> 8) & 0xf) + hex.charAt((c >> 4) & 0xf) + hex.charAt(c & 0xf); } if (quoteStrings) s = "\"" + s + "\""; return s; } case "object": case "function": break; default: return ""; } if (o instanceof Array) { var s = "["; for (var i = 0; i < o.length; ++i) { if (i) s += ", "; s += toString(o[i], true); } return s + "]"; } if (o instanceof Error) return o.name + ": " + o.message; if (o instanceof RegExp) return o.toString() + (o.lastIndex === 0 ? "" : " (lastIndex: " + o.lastIndex + ")"); return "" + o; } function echo(o) { var s = toString(o); try { document.write(s + "
"); } catch (ex) { try { WScript.Echo(s); } catch (ex2) { print(s); } } } function safeCall(f) { var args = []; for (var a = 1; a < arguments.length; ++a) args.push(arguments[a]); try { return f.apply(this, args); } catch (ex) { echo(ex); } }