在编写这个答案时,我使用了mpf_pow函数来计算12.3 ^ 123,结果与WolframAlpha给出的一不同(顺便说一下,WolframAlpha也使用了一)。
为了简化,我将代码抛到纯C中:
#include <stdio.h>
#include <gmp.h>
int main (void) {
mpf_t a, c;
unsigned long int b = 123UL;
mpf_set_default_prec(100000);
mpf_inits(a, c, NULL);
mpf_set_d(a, 12.3);
mpf_pow_ui(c, a, b);
gmp_printf("c = %.50Ff\n", c);
return 0;
}这会导致
114374367934618002778643226182707594198913258409535335775583252201365538178632825702225459029661601216944929436371688246107986574246790.32099077871758646985223686110515186972735931183764
当WolframAlpha返回时
1.14374367934617190099880295228066276746218078451850229775887975052369504785666896446606568365201542169649974727730628842345343196581134895919942820874449837212099476648958359023796078549041949007807220625356526926729664064846685758382803707100766740220839267 × 10^134
它开始不同意mpf_pow的第15位数字。
我是不是在代码中做错了什么,这是GMP的限制,还是WolframAlpha给出了错误的结果?
发布于 2022-01-11 16:50:18
这给出了类似于WolframAlpha的结果:
from decimal import Decimal
from decimal import getcontext
getcontext().prec = 200
print(Decimal('12.3') ** 123)所以你一定在你的GMP配置上做错了什么。
https://stackoverflow.com/questions/70670338
复制相似问题