将学术数学符号转换为C代码

时间:2010-09-14 20:55:06

标签: c math notation

那些甚至中等数学知识的人都会笑,但我不记得数学中有多少符号规则,我需要帮助将其转换为C代码。非常感谢您的帮助:

                                         214
          10,000 {(10,000 × [1+.0599/365]   )} +300
answer = ────────────────────────────────────────────
                                   214
                     .1+(1+(i/365))

4 个答案:

答案 0 :(得分:12)

您是否正在寻找一个程序来为您翻译,或只是一次性转换? 如果它只是一次转换,那就不那么令人兴奋了。

假设我已正确阅读您的语法:

double ans = 10000 * (10000 * pow(1.0 + 0.0599 / 365, 214) + 300;
ans /= (0.1 + pow(1.0 + (i / 365.0), 214));
但是,我会说,你可能会遇到一个问题,那就是把事情提升到一个指数的高点和分裂。您更有可能需要转换为日志并在日志空间中进行数学运算,然后进行转换。

可能是什么样的:

double lognumerator = log(10000) + log(10000) + 214 * log(1 + 0.0599 / 365);
double logdenominator = log(0.1 + exp(214 * log(1.0 + (i / 365.0))));
double ans = exp(lognumerator - logdenominator) + exp(log(300) - logdenominator);

使用日志可能会阻止您使用下溢,这可能会受到这些类型的计算的影响。

答案 1 :(得分:2)

简单 - 只需要注意几个常见的错误。

在常数之后放置.0(特别是在分母中),以便'c'将计算视为浮点数而不是整数。
在'C'中,100/1000是0 100 / 1000.0是0.1

自由使用括号 - 不要相信记住优先规则。

你需要在任何地方使用*进行乘法3(1 + 2)不是乘法。

pow(x,y)函数用于x ^ y。现代C ++编译器具有优化版本,其中y是整数,因此x ^ 2比x ^ 2.0

快得多

答案 2 :(得分:0)

您是否在寻找pow(x,y)功能来计算功率?

答案 3 :(得分:0)

(10000.0 ( ( 10000.0 * pow(1 + 0.0599/365.0, 214.0))) + 300.0 ) / (1 + pow(1 + i/365.0, 214.0))

我想我做对了。 :)