例如,如果我想计算(100!)/(99!),我们知道答案是100,但如果我分别计算分子和分母的阶乘,两个数字都是巨大的.
#include "math.h" #include "stdio.h" int main(){ printf("%lf\n",(100.0/99.0) * exp(lgamma(100)-lgamma(99)) ); } @H_404_9@ 尝试它,它真的做你想要的,即使它看起来有点疯狂,如果你不熟悉它.使用一个bigint库将是非常低效的.拍摄伽马的日志是超快的.这一切立即运行. 您需要乘以100/99的原因是gamma相当于n-1!不是!那么是的,你可以直接做exp(lgamma(101)-lgamma(100)).另外,伽玛不仅限于整数而定义.
尝试它,它真的做你想要的,即使它看起来有点疯狂,如果你不熟悉它.使用一个bigint库将是非常低效的.拍摄伽马的日志是超快的.这一切立即运行.
您需要乘以100/99的原因是gamma相当于n-1!不是!那么是的,你可以直接做exp(lgamma(101)-lgamma(100)).另外,伽玛不仅限于整数而定义.