Python 如何在不使用打印的情况下使此浮动精度
我在做作业,是关于梯形规则的数值方法Python 如何在不使用打印的情况下使此浮动精度,python,arraylist,Python,Arraylist,我在做作业,是关于梯形规则的数值方法 def trapezoidalRule(F,a,b,n): h = float(b-a)/n f_sum = 0 for i in range(1, n, 1): x = a + i * h f_sum = f_sum + f(x) return h * (0.5 * f(a) + f_sum + 0.5 * f(b)) def f(x): return x**3 a = 2 b = 10 n = 512 print
def trapezoidalRule(F,a,b,n):
h = float(b-a)/n
f_sum = 0
for i in range(1, n, 1):
x = a + i * h
f_sum = f_sum + f(x)
return h * (0.5 * f(a) + f_sum + 0.5 * f(b))
def f(x):
return x**3
a = 2
b = 10
n = 512
print('%.16f' %trapezoidalRule(f, a, b, n))
输出是
2496.0058593750000000
我的问题是,我如何得到这样的精度。。不使用打印('%.16f'%梯形规则(f,a,b,n))
。我想将结果附加到列表中,精确值如下。。
我已经试过用谷歌搜索了,但是我没有发现与这个问题相关的任何东西,如果我想搜索,有人能告诉我解决方案吗?将
梯形规则中的return语句更改为16点精度的格式,请注意,这将导致它变成一个字符串,就好像您将它抛回浮点一样,您将丢失尾随的0
def trapezoidalRule(F,a,b,n):
h = float(b-a)/n
f_sum = 0
for i in range(1, n, 1):
x = a + i * h
f_sum = f_sum + f(x)
return format((h * (0.5 * f(a) + f_sum + 0.5 * f(b))), '.16f')
def f(x):
return x**3
a = 2
b = 10
n = 512
请参见梯形规则
中的返回行,现在如果我打印梯形规则
的精确输出,就像这样:print(梯形规则(f,a,b,n))
没有格式,我得到:
2496.0058593750000000
要提高精度,请尝试使用decimal
模块
import decimal
def trapezoidalRule(F,a,b,n):
h = decimal.Decimal(float(b-a)/n)
f_sum = 0
for i in range(1, n, 1):
x = a + i * h
f_sum = f_sum + f(x)
return h * (decimal.Decimal(0.5) * f(a) + f_sum + decimal.Decimal(0.5) * f(b))
def f(x):
return decimal.Decimal(x**3)
如果您想在末尾打印额外的0-s,那么像现在这样格式化是您唯一的选择。如果您只想对数字进行四舍五入,请检查round()
函数。您是说我无法将该精确值附加到列表中?您想在列表中存储print语句的值吗?20位数字比浮点的实际精度高,因此这不是一个精确值,只是添加了零的接近值。如果您想要更高的精度,请查看十进制
模块。是的,精确的输出值@vishalupadhyayth这是我想要的答案,非常感谢您,先生!这也是事实,我很感激你的回答