【问题标题】:C++ math expression from math formula来自数学公式的 C++ 数学表达式
【发布时间】:2015-11-20 09:03:40
【问题描述】:

我尝试将这个数学公式转换为 C++ 表达式

但我做错了什么

(log(1.0+a*(getpixel(j,k)))/log10( y ))/(log(2.0)/log10( y ))

【问题讨论】:

  • 执行复杂表达式的一般技巧:将它们分成更小的部分!此外,仅仅说“出了点问题”是一个非常糟糕的问题描述。 怎么错了?你有构建错误吗?您是否遇到运行时错误(又名崩溃)?你会得到意想不到的结果吗?
  • a 不是函数(我猜),你必须写 a* ... 而不是 a(...)。另外我不明白你为什么投给int
  • ln(2) 是 0.6...int 这是 0,所以很可能你有除以零
  • 来吧,不要通过修复你要求的东西来改变你的问题。您应该添加问题描述,如果您找到解决方案,请将其作为答案发布。
  • 您也没有正确计算 logₑ{...}。 log(...)/log10(y) 不正确。看起来您正在尝试更改基数,但您做错了,无论如何您都不需要这样做,因为log() 函数已经为您提供了日志基数 e。要更改基数,您必须在顶部和底部使用相同的基数,而底部的参数是新基数。在顶部使用 log 和在底部使用 log10 将不起作用,并且您想要记录基数 e,而不是记录基数 y。

标签: c++ math logarithm


【解决方案1】:

首先,log 函数已经计算了以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*F1 + a*F 也分开存储)。

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

const double result = log(1.0 + a * getpixel(j, k) / log(2.0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-08
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多