C++;数学公式的数学表达式 我试图在C++表达式中转换这个数学公式。

C++;数学公式的数学表达式 我试图在C++表达式中转换这个数学公式。,c++,math,logarithm,C++,Math,Logarithm,但我做错了什么 (log(1.0+a*(getpixel(j,k)))/log10( y ))/(log(2.0)/log10( y )) 首先,该函数已经计算出以e为底的对数。您不需要执行任何基础更改 其次,将表达式拆分为多个部分,以便于编写和理解: const double F = getpixel(j, k); const double numerator = log(1.0 + a * F); const double denominator = log(2.0); const dou

但我做错了什么

(log(1.0+a*(getpixel(j,k)))/log10( y ))/(log(2.0)/log10( y ))
首先,该函数已经计算出以
e
为底的对数。您不需要执行任何基础更改

其次,将表达式拆分为多个部分,以便于编写和理解:

const double F = getpixel(j, k);
const double numerator = log(1.0 + a * F);
const double denominator = log(2.0);
const double result = numerator / denominator;
您可以选择将其进一步拆分(例如,分别存储
a*F
,以及
1+a*F

一旦你得到了它,如果你真的想把它放在一行中,组合起来就很容易了(但是没有必要;编译器通常会为你把常量表达式合并在一起):


处理复杂表达式的一般技巧:将它们拆分为更小的部分!而且,仅仅说“出了点问题”是一个非常糟糕的问题描述。怎么会错呢?你有生成错误吗?您是否遇到运行时错误(又称崩溃)?你得到了意想不到的结果吗?
a
不是一个函数(我猜),你必须写
a*…
而不是
a(…)
。我也不明白你为什么要强制转换为
int
。ln(2)是0.6。。。因为
int
这是0,所以很可能你有一个被零除的除法。拜托,不要通过修正你要求的东西来改变你的问题。您应该添加问题描述,如果您找到了解决方案,请将其作为答案发布。您也没有计算日志ₑ{…}正确<代码>日志(…)/log10(y)不正确。看起来您正在尝试更改基数,但是您做得不对,而且您无论如何都不需要这样做,因为
log()
函数已经为您提供了log base e。要改变基址,必须在顶部和底部使用相同的基址,底部的参数是新的基址。使用顶部的
log
和底部的
log10
将不起作用,您需要的是以e为基准的日志,而不是以y为基准的日志。
const double result = log(1.0 + a * getpixel(j, k) / log(2.0);