0

那些对数学有一定了解的人可能会笑,但我不记得数学中有多少符号规则,我需要帮助将其转换为 C 代码。非常感谢您的帮助:

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

4 回答 4

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);

使用 log 可能会阻止您遇到下溢,而这些类型的计算很可能会遇到下溢。

于 2010-09-14T21:05:34.320 回答
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 快得多

于 2010-09-14T21:03:18.007 回答
0

您在寻找pow(x,y)计算功率的函数吗?

于 2010-09-14T20:59:54.863 回答
0
(10000.0 ( ( 10000.0 * pow(1 + 0.0599/365.0, 214.0))) + 300.0 ) / (1 + pow(1 + i/365.0, 214.0))

我想我是对的。:)

于 2010-09-14T21:04:18.520 回答