当前位置: 首页 > 知识库问答 >
问题:

精确n次方根

裴星洲
2023-03-14

我正在寻找Python的第n个根函数/算法,但在发布之前:没有整数根,见鬼
我从哪里至少可以获得一个指南,指导如何编程生成精确的浮点数/十进制数
对于根(1251756482845)(第一个参数是数字,第二个参数是根深度(或其他内容))不返回10的函数。

编辑:所以,你给了我这个解决方案:n**(1.0/exp),当我问这个问题时,我就知道了,但它不适用于,例如,exp=3。你不能用有理数来表示1/3,因此125**(1/3)给出了不正确的结果4.99999 。我要求的是一些“智能”算法,它能为这些漂亮的数字提供正确的结果,并为rationalexp提供至少4个小数点的精确结果。如果没有这样的函数或算法,我将使用这个(n**(1/exp))。


共有3个答案

越涵衍
2023-03-14

这是math模块的函数pow

import math
math.pow(4, 0.5) 

将返回4的平方根,即2.0

对于根目录(1251756482845),您需要做的是

math.pow(125, 1.0 / 1756482845)
张腾
2023-03-14

您可以对答案进行二进制搜索。如果你想找到等于N的第k个根的X,你可以在X上做一个二进制搜索,测试二进制搜索的每一步X^k是否等于N-一些小常数以避免精度问题。

代码如下:

import math

N,K = map(float,raw_input().split()) # We want Kth root of N
lo = 0.0
hi = N
while 1:
    mid = (lo+hi)/2
    if math.fabs(mid**K-N) < 1e-9: # mid^K is really close to N, consider mid^K == N
        print mid
        break
    elif mid**K < N: lo = mid
    else: hi = mid

对于(N,K)=(125,3),它打印5.0,即正确答案。您可以通过更改1e-9常量使其更精确,但Python中存在与浮点变量精度限制相关的精度限制

花稳
2023-03-14

我会尝试gmpy2库。

>>> import gmpy2
>>> gmpy2.root(125,3)
mpfr('5.0')
>>> 

gmpy2使用MPFR库执行正确的四舍五入浮点运算。默认精度为53位,但可以提高。

>>> gmpy2.root(1234567890123456789**11, 11)
mpfr('1.2345678901234568e+18')  # Last digits are incorrect.
>>> gmpy2.get_context().precision=200
>>> gmpy2.root(1234567890123456789**11, 11)
mpfr('1234567890123456789.0',200)
>>> 

免责声明:我维护gmpy2

 类似资料:
  • 我已经设置了一个Flink 1.2独立集群,其中包含2个JobManager和3个TaskManager,我正在使用JMeter通过生成Kafka消息/事件对其进行负载测试,然后处理这些消息/事件。处理作业在TaskManager上运行,通常需要大约15K个事件/秒。 作业已设置EXACTLY_ONCE检查点,并将状态和检查点持久化到Amazon S3。如果我关闭运行作业的TaskManager需

  • 我将Antlr4与python3运行时一起使用。在我试图解析的语言中,有许多操作(大约50个)接受固定数量的参数,其形式为 我以前有一个语法,规则是这样的: 您是否知道我是否可以创建一个规则,该规则也适用于?根据一个经常变化的规则(每隔几个月就会添加或删除一些操作符),拥有这个子库确实有助于清晰

  • 假设我有一个python脚本: 我该怎么做呢?

  • 我在Google Code Jam中读到一个关于牛眼的问题。(比赛现在结束了,所以可以谈论它) 玛丽亚从t毫升黑色油漆开始,她将用它来画1厘米厚的戒指。厚度为1cm的圆环是半径相差1cm的两个同心圆之间的空间。 玛丽亚画了第一个黑色的环周围半径为r厘米的白色圆圈。 半径为1cm的圆盘面积为πcm2。需要一毫升油漆覆盖面积πcm2。玛丽亚最多能画多少个黑戒指? 根据我在纸上的计算,画一个有n个环的牛

  • 一、 我正试图用Kafka信源和信宿测试Flink一次语义: 运行flink应用程序,只需将消息从一个主题传输到另一个主题,并行度=1,检查点间隔20秒 每2秒使用Python脚本生成具有递增整数的消息。 使用read_committed隔离级别的控制台使用者读取输出主题。 手动杀死TaskManager 我希望在输出主题中看到单调递增的整数,而不考虑TaskManager的终止和恢复。 但实际上