JS vs C ++表达式评估

时间:2014-12-30 15:00:53

标签: javascript c++ expression

我必须重写一些从JavaScript到C ++的算法。所以我有一个问题:我应该注意什么?在JS和C ++中进行评估之间有什么区别?

例如,这个缓动算法:

var pi2 = Math.PI * 2;
var s = period/pi2 * Math.asin(1/amplitude);
if ((t*=2)<1) return -0.5*(amplitude*Math.pow(2,10*(t-=1))*Math.sin( (t-s)*pi2/period ));
return amplitude*Math.pow(2,-10*(t-=1))*Math.sin((t-s)*pi2/period)*0.5+1;

当我将var更改为doubleMath.更改为std::时,它会进行编译,但表达式中的-=会导致UB(我的编译器说它。)。

你知道还有哪些棘手的差异?

1 个答案:

答案 0 :(得分:0)

JavaScript和C ++非常难以比拟。它就像苹果和橘子。两者都是可以执行计算/功能的语言(就像苹果和橙子都是水果一样),但它们几乎没有相似之处。

这大致是JavaScript代码的C ++实现:

#include <iostream>
#include <math.h>

using namespace std;

const double PI = 3.141592653589793;
const double twoPI = PI * 2;

int main(int argc, char *argv[]){
    /*
     * I do not know what t is supposed to be, so I
     * randomly chose a value.
     */
    double t = 0.43;

    double amplitude = 1.0;
    double period = 2.0;
    /* I have filled in some standard values for period
       and amplitude because your code did not supply any. */

    double s = (period/twoPI) * asin(1/amplitude);

    if( (t*2) < 1){
        double exponentForPow = 10.0*(t-1);
        double powPiece = amplitude * pow(2.0, exponentForPow);
        double sinPiece = sin(((t-s) * (twoPI/period)));
        double finalAnswer = (-0.5 * powPiece * sinPiece);
        cout << finalAnswer << endl;
    }else{
        double exponentForPow = -10.0*(t-1);
        double powPiece = amplitude * pow(2, exponentForPow);
        double sinPiece = sin(((t-s) * (twoPI/period)));
        double finalAnswer = 1.0 + (0.5*( powPiece * sinPiece ));
        cout << finalAnswer << endl;
    }

    return 0;
    // in C++, the main() function must an integer.
    // You could return finalAnswer if you wrote a
    // second function just for the calculation
}

我没有测试过这段代码,所以我不知道它是否会正确编译或是否会产生所需的结果。但是,它应该为您提供一个很好的概述,或者至少可以很好地了解您发布的代码将如何用C ++编写。