C++ 用C写数学表达式++

C++ 用C写数学表达式++,c++,math,C++,Math,下面的数学表达式有问题: cin >> value; dividend = tan(fabs(2*value*value + 5 * value - 31.15)) + log(fabs(value*value - 2.5)) / log(5.0); divider = pow(fabs(pow(sin(value*value*value), 2) + fabs(0.33*(log(fabs(value*value - 2.5) / log(5.0))))),

下面的数学表达式有问题:

cin >> value;

dividend = tan(fabs(2*value*value + 5 * value - 31.15)) 
    + log(fabs(value*value - 2.5)) / log(5.0);

divider = pow(fabs(pow(sin(value*value*value), 2)
    + fabs(0.33*(log(fabs(value*value - 2.5) / log(5.0))))), 1 / 5.0); 

result = dividend / divider;

结果是无效的值。可能是什么问题?

尽管分母有平衡圆括号,如果愿意,也有分隔符,但它们的位置不正确。正如Yves Daoust所观察到的,您将log5.0的除法放错了位置

在不同的行上隔开子表达式和括号有助于您看到以下内容:

pow(
    fabs(
          pow(sin(value*value*value), 2)
           + fabs(
                  0.33 * ( 
                            log( fabs(value*value - 2.5) / log(5.0) )
                         )
                 )
        )
, 1 / 5.0); 

另外,为什么要用0.33表示三分之一,除非你真的不在意精度?除以3是可移植的…

无效值是什么意思?它与PEMDAS有关。将其分解为更多语句,以便更轻松地查看发生的情况,在开始时设置断点,然后使用调试器逐步执行。你让它很难阅读,这就是为什么你不能发现问题的原因。第二行还有一个x。日志中的2*value*value+5*x-31.15log5.0。