微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

prolog 如何能够如此快速地递归执行大型计算操作?像 10000 阶乘

如何解决prolog 如何能够如此快速地递归执行大型计算操作?像 10000 阶乘

为什么 prolog 在这样的数值计算中如此快速和准确

factorial(X,N) :- N = 0,X is 1;
                   N > 0,N1 is N - 1,factorial(X1,N1),X is X1 * N.

我输入了factorial(X,10000).,答案是如此准确和快速,这是一个太长的数字。 那么 prolog 是怎么做到的呢?,里面的数字的数据结构是什么?以及如何在 C、C++、C# 和 Java 等语言中实现它?

解决方法

如果您的问题是关于“大数”,则会使用适当的“大数”库。

例如,SWI-Prolog 使用“GNU 多精度库”:

...虽然它不提供“十进制数”(没有人想在 Prolog 中计算货币金额吗?)

OTOH 确实提供非整数有理数

您将在 C 或 C++ 中进行类似的操作。

对于 Java,请使用标准的 BigIntegerBigDecimal 实现。我确定 C# 中也存在同样的情况。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。