math.js revision 589d6979ff2ef66fca2d8fa51404c369ca5e9250
1a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Copyright 2006-2008 the V8 project authors. All rights reserved. 2a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Redistribution and use in source and binary forms, with or without 3a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// modification, are permitted provided that the following conditions are 4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// met: 5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// 6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Redistributions of source code must retain the above copyright 7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// notice, this list of conditions and the following disclaimer. 8a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Redistributions in binary form must reproduce the above 9a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// copyright notice, this list of conditions and the following 10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// disclaimer in the documentation and/or other materials provided 11a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// with the distribution. 12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// * Neither the name of Google Inc. nor the names of its 13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// contributors may be used to endorse or promote products derived 14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// from this software without specific prior written permission. 15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// 16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 28a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 29a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Keep reference to original values of some global properties. This 30a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// has the added benefit that the code in this file is isolated from 31a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// changes to these properties. 32a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockconst $floor = MathFloor; 33a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockconst $random = MathRandom; 34a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockconst $abs = MathAbs; 35a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 36a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Instance class name can only be set on functions. That is the only 37a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// purpose for MathConstructor. 38a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathConstructor() {} 39a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block%FunctionSetInstanceClassName(MathConstructor, 'Math'); 40a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockconst $Math = new MathConstructor(); 41589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch$Math.__proto__ = $Object.prototype; 42a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block%SetProperty(global, "Math", $Math, DONT_ENUM); 43a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 44a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.1 45a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathAbs(x) { 46a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (%_IsSmi(x)) return x >= 0 ? x : -x; 47086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 486ded16be15dd865a9b21ea304d5273c8be299c87Steve Block if (x === 0) return 0; // To handle -0. 496ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return x > 0 ? x : -x; 50a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 51a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 52a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.2 53a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathAcos(x) { 54086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 55a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return %Math_acos(x); 56a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 57a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 58a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.3 59a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathAsin(x) { 60086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 61a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return %Math_asin(x); 62a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 63a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 64a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.4 65a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathAtan(x) { 66086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 67a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return %Math_atan(x); 68a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 69a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 70a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.5 71a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// The naming of y and x matches the spec, as does the order in which 72a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ToNumber (valueOf) is called. 73a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathAtan2(y, x) { 74086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(y)) y = NonNumberToNumber(y); 75086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 76a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return %Math_atan2(y, x); 77a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 78a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 79a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.6 80a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathCeil(x) { 81086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 82a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return %Math_ceil(x); 83a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 84a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 85a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.7 86a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathCos(x) { 87086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 886ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return %_MathCos(x); 89a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 90a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 91a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.8 92a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathExp(x) { 93086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 94a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return %Math_exp(x); 95a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 96a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 97a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.9 98a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathFloor(x) { 99086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 100a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // It's more common to call this with a positive number that's out 101a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // of range than negative numbers; check the upper bound first. 102e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke if (x < 0x80000000 && x > 0) { 103a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // Numbers in the range [0, 2^31) can be floored by converting 104a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // them to an unsigned 32-bit value using the shift operator. 105a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // We avoid doing so for -0, because the result of Math.floor(-0) 106a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // has to be -0, which wouldn't be the case with the shift. 107e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke return TO_UINT32(x); 108a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } else { 109a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return %Math_floor(x); 110a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 111a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 112a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 113a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.10 114a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathLog(x) { 115086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 116b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch return %_MathLog(x); 117a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 118a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 119a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.11 120a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathMax(arg1, arg2) { // length == 2 121a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block var length = %_ArgumentsLength(); 122d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block if (length == 0) { 123d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block return -1/0; // Compiler constant-folds this to -Infinity. 124d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block } 125d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block var r = arg1; 126086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(r)) r = NonNumberToNumber(r); 127d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block if (NUMBER_IS_NAN(r)) return r; 128d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block for (var i = 1; i < length; i++) { 129d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block var n = %_Arguments(i); 130086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(n)) n = NonNumberToNumber(n); 131a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (NUMBER_IS_NAN(n)) return n; 132e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke // Make sure +0 is considered greater than -0. -0 is never a Smi, +0 can be 133e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke // a Smi or heap number. 134e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke if (n > r || (r === 0 && n === 0 && !%_IsSmi(r) && 1 / r < 0)) r = n; 135a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 136a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return r; 137a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 138a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 139a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.12 140a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathMin(arg1, arg2) { // length == 2 141a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block var length = %_ArgumentsLength(); 142d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block if (length == 0) { 143d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block return 1/0; // Compiler constant-folds this to Infinity. 144d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block } 145d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block var r = arg1; 146086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(r)) r = NonNumberToNumber(r); 147d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block if (NUMBER_IS_NAN(r)) return r; 148d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block for (var i = 1; i < length; i++) { 149d0582a6c46733687d045e4188a1bcd0123c758a1Steve Block var n = %_Arguments(i); 150086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(n)) n = NonNumberToNumber(n); 151a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block if (NUMBER_IS_NAN(n)) return n; 152e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke // Make sure -0 is considered less than +0. -0 is never a Smi, +0 can b a 153e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke // Smi or a heap number. 154e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke if (n < r || (r === 0 && n === 0 && !%_IsSmi(n) && 1 / n < 0)) r = n; 155a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block } 156a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return r; 157a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 158a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 159a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.13 160a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathPow(x, y) { 161086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 162086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(y)) y = NonNumberToNumber(y); 1636ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return %_MathPow(x, y); 164a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 165a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 166a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.14 167a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathRandom() { 1686ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return %_RandomHeapNumber(); 169a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 170a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 171a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.15 172a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathRound(x) { 173086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 1746ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return %RoundNumber(x); 175a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 176a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 177a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.16 178a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathSin(x) { 179086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 1806ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return %_MathSin(x); 181a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 182a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 183a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.17 184a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathSqrt(x) { 185086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 1866ded16be15dd865a9b21ea304d5273c8be299c87Steve Block return %_MathSqrt(x); 187a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 188a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 189a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ECMA 262 - 15.8.2.18 190a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockfunction MathTan(x) { 191086aeeaae12517475c22695a200be45495516549Ben Murdoch if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 192a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block return %Math_tan(x); 193a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} 194a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 195a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 196a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// ------------------------------------------------------------------- 197a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 198589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdochfunction SetUpMath() { 199589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch %CheckIsBootstrapping(); 200589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch // Set up math constants. 201a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // ECMA-262, section 15.8.1.1. 202a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block %OptimizeObjectForAddingMultipleProperties($Math, 8); 203a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block %SetProperty($Math, 204a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "E", 205a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 2.7182818284590452354, 206a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block DONT_ENUM | DONT_DELETE | READ_ONLY); 207a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // ECMA-262, section 15.8.1.2. 208a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block %SetProperty($Math, 209a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "LN10", 210a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 2.302585092994046, 211a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block DONT_ENUM | DONT_DELETE | READ_ONLY); 212a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // ECMA-262, section 15.8.1.3. 213a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block %SetProperty($Math, 214a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "LN2", 215a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 0.6931471805599453, 216a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block DONT_ENUM | DONT_DELETE | READ_ONLY); 217a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // ECMA-262, section 15.8.1.4. 218a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block %SetProperty($Math, 219a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "LOG2E", 220a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1.4426950408889634, 221a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block DONT_ENUM | DONT_DELETE | READ_ONLY); 222a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block %SetProperty($Math, 223a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "LOG10E", 2241e0659c275bb392c045087af4f6b0d7565cb3d77Steve Block 0.4342944819032518, 225a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block DONT_ENUM | DONT_DELETE | READ_ONLY); 226a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block %SetProperty($Math, 227a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "PI", 228a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 3.1415926535897932, 229a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block DONT_ENUM | DONT_DELETE | READ_ONLY); 230a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block %SetProperty($Math, 231a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "SQRT1_2", 232a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 0.7071067811865476, 233a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block DONT_ENUM | DONT_DELETE | READ_ONLY); 234a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block %SetProperty($Math, 235a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "SQRT2", 236a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 1.4142135623730951, 237a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block DONT_ENUM | DONT_DELETE | READ_ONLY); 238402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu %ToFastProperties($Math); 239a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 240589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch // Set up non-enumerable functions of the Math object and 241a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block // set their names. 242a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block InstallFunctionsOnHiddenPrototype($Math, DONT_ENUM, $Array( 243a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "random", MathRandom, 244a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "abs", MathAbs, 245a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "acos", MathAcos, 246a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "asin", MathAsin, 247a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "atan", MathAtan, 248a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "ceil", MathCeil, 249a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "cos", MathCos, 250a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "exp", MathExp, 251a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "floor", MathFloor, 252a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "log", MathLog, 253a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "round", MathRound, 254a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "sin", MathSin, 255a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "sqrt", MathSqrt, 256a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "tan", MathTan, 257a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "atan2", MathAtan2, 258a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "pow", MathPow, 259a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "max", MathMax, 260a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block "min", MathMin 261a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block )); 262589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch} 263a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block 264589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben MurdochSetUpMath(); 265