2014-12-30 3 views
-3

Мне нужно переписать некоторые алгоритмы с JavaScript на C++. Поэтому у меня есть вопрос: на что я должен обратить внимание? Какие различия между оценкой в ​​JS и C++?Оценка выражения JS vs 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 с до double с и Math. к std::, он будет компилировать, но -= в выражении приведет к UB (мой компилятор говорит, что это).

Какие еще интересные отличия вы знаете?

+1

Возможно, вы захотите ознакомиться с порядковыми точками, порядком оценки и последовательности. – Deduplicator

+1

Вопрос гигантски широк и вряд ли будет полностью удовлетворен, если вы не ожидаете, что мы перепечатаем несколько учебников здесь. – PartyLich

+0

@Deduplicator Я не думаю, что оценочные последовательности в этом примере слишком разные. Неопределенное поведение может быть вызвано вычитанием float из целого числа или чем-то подобным. Это также сильно зависит от используемого компилятора и ОС, для которого скомпилирован код. – VisioN

ответ

0

JavaScript и C++ очень несравнимы. Это как яблоки и апельсины. Оба являются языками, которые могут выполнять вычисления/функции (так же, как и яблоки, и апельсины - плоды), но они имеют очень мало сходства.

Это примерно С ++ реализация кода JavaScript:

#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++.

+0

Я не новичок в C++. C++ имеет синтаксис выражений, очень похожий на JS, но совершенно другую семантику. Многочисленные арифметические выражения JS являются допустимыми (компилируемыми) выражениями C++. И я задаю вопрос о различиях, которые не только означают семантику выражения на этих языках, но не сравнение всего языка. – kubawal

+0

. выражения, которые действительны на обоих языках, но будут давать разные результаты. – kubawal

Смежные вопросы