那些甚至中等数学知识的人都会笑,但我不记得数学中有多少符号规则,我需要帮助将其转换为C代码。非常感谢您的帮助:
214
10,000 {(10,000 × [1+.0599/365] )} +300
answer = ────────────────────────────────────────────
214
.1+(1+(i/365))
答案 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))
我想我做对了。 :)