我试图在 C 中表示以下数学表达式:
P(n) = (n!)(6^n)
程序应在 n
= 156 时计算表达式的答案。我曾尝试用 C 语言创建程序,但未能生成答案。答案大约是 10^397。该程序使用 2 个对数恒等式。它还利用斯特林近似来计算大阶乘。
我怎样才能让它产生正确的答案,你对我如何改进代码有什么建议吗? (我对编程还很陌生):
#include <math.h>
typedef unsigned int uint;
int main()
{
uint n=156; // Declare variables
double F,pi=3.14159265359,L,e=exp(1),P;
F = sqrt(2*pi*n) * pow((n/e),n); // Stirling's Approximation Formula
L = log(F) + n*log(6); // Transform P(n) using logarithms - log(xy) = log(x) + log(y) and log(y^n) = n*log(y)
P = pow(e,L); // Transform the resultant logarithm back to a normal numbers
}
谢谢! :)
最佳答案
大多数 C 实现中的整数和浮点变量都不能支持这种数量级的数字。典型的 64 位 double 会达到 10308 之类的值,在该数量级会出现大量精度损失。
您需要所谓的“bignum 库”来计算它,这不是标准 C 的一部分。
关于c - C中的公式P(n) = (n!)(6^n)产生了一个很大的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27256720/