首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >平方根到50位小数,不导入小数或数学函数

平方根到50位小数,不导入小数或数学函数
EN

Stack Overflow用户
提问于 2020-10-06 21:38:26
回答 1查看 162关注 0票数 0

是否可以在不使用小数导入的情况下计算到50位小数?下面打印了我想要的东西,但我想知道如何在没有任何数学或小数输入的情况下做到这一点。

代码语言:javascript
复制
def sqrt2(num, P):
    decimal.getcontext().prec = P + len(str(num)) + 2
    x = decimal.Decimal(num)
    y = decimal.Decimal(1)
    e = decimal.Decimal(10) ** decimal.Decimal(-P)
    while (x - y >= e):
        x = (x + y) / 2
        y = num / x

    
print (sqrt2(2, 50)) 

我也试过了:

代码语言:javascript
复制
    x=n
    y=1.000000 
    e=0.000001 
    while x-y > e:
        x=(x+y)/2
        y=n/x
    print (x)

n = 2
squareRoot(n)

s = squareRoot(n)
a = format(s, ".2f")
print (s)

但是收到了错误消息"unsupported format string passed to NoneType"

EN

回答 1

Stack Overflow用户

发布于 2020-10-06 21:55:50

首先需要注意的是,sqrt函数不返回任何值。因此不会返回任何内容。只需添加这一行

代码语言:javascript
复制
return(x)

在函数定义的末尾,最好也去掉print(x)行,让你的函数返回值而不是打印它。

但问题更深层次。首先,提到,Python3(内置)中float长度只有大约。点后16位十进制数字。所以我们不能计算得更精确。有一些模块可以让你做到这一点: numpy支持float128 (约.32个十进制数字),如果这还不够,可以看看decimal或mpmath。两者都有很好的文档记录,并支持更高的精度。没有内置的方法。

一篇关于python中的高精度计算的文章以及为什么需要它们的原因:https://habr.com/ru/post/305276/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64227023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档