6

我正在开发一种将 JavaScript 源代码转换为目标语言的翻译器。我正在尝试用目标语言实现 JavaScript 的 Math 对象。

如果有“数学”对象的 JavaScript 实现,我可以使用翻译器获取目标语言中的等效代码。

我正在寻找这样的东西:

var Math = {
    pow: function(...) {...}
    exp: function(...) {...}
    /* other methods of Math */
}

有没有这样的实现可用?这将帮助我避免用目标语言手动编写 Math 对象的代码。

4

3 回答 3

4

math.js 的 V8 实现可能会为您提供一些指导,但当然它充斥着用于本地函数调用的占位符。您必须能够用%Math_floor(x)目标语言中适当的基于标准库的函数调用来替换诸如此类的东西。

http://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/math.js?spec=svn10758&r=10758

于 2012-03-25T20:42:43.693 回答
3

这是来自官方 ecmascript-262 规范

注意这里没有精确指定函数 acos、asin、atan、atan2、cos、exp、log、pow、sin、sqrt 和 tan 的行为,除非需要对表示感兴趣的边界情况的某些参数值的特定结果。对于其他参数值,这些函数旨在计算熟悉的数学函数结果的近似值,但在选择近似算法时允许有一定的自由度。总体意图是实现者应该能够在给定的硬件平台上为 ECMAScript 使用相同的数学库,该平台上的 C 程序员可以使用该数学库。

虽然算法的选择留给实现,但建议(但本标准未指定)实现使用 fdlibm 中包含的 IEEE 754 算法的近似算法,fdlibm 是 Sun Microsystems 的可免费分发的数学库 ( http://www .netlib.org/fdlibm)。

于 2012-03-25T20:31:20.053 回答
2

您需要的对象是:

Math.exp(x) // Returns the value of Ex

Math.pow(x,y)   // Returns the value of x to the power of y

除了这些之外,还有更多可以帮助您了解您在 java 中需要的内容。那些是

Math.PI         // returns PI
Math.random();              // returns a random number
Math.max(0, 150, 30, 20, -8, -200);      // returns 150
Math.min(0, 150, 30, 20, -8, -200);      // returns -200
Math.round(4.7);            // returns 5
Math.round(4.4);            // returns 4
于 2015-09-30T20:23:01.040 回答