【问题标题】:How to make this float precision without using print如何在不使用打印的情况下使此浮点精度
【发布时间】:2020-04-29 16:54:28
【问题描述】:

我正在做作业,是关于梯形规则的数值方法

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

我的问题是,如何在不使用 print('%.16f' %trapezoidalRule(f, a, b, n)) 的情况下获得这样的精度。我想将结果附加到列表中,具有这样的确切值.. 我已经尝试谷歌它,但我没有发现与此问题相关的内容,如果我愿意,有人可以告诉我解决方案吗?

【问题讨论】:

  • 如果你想在最后打印额外的 0-s,像现在这样格式化是你唯一的选择。如果您只想对数字进行四舍五入,请查看round() 函数
  • 所以你是说我无法将确切的值附加到列表中?
  • 您想将打印语句的值存储在列表中?
  • 20 位比浮点数的实际精度高,所以这不是一个精确值,只是加了零的接近值。如果您想要更高的精度,请查看decimal 模块。
  • 是的,准确的输出值@VishalUpadhyay

标签: python arraylist


【解决方案1】:

trapezoidalRule 中的 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

查看trapezoidalRule 中的返回行,所以现在如果我打印trapezoidalRule 的确切输出,如下所示:print(trapezoidalRule(f, a, b, n)) 没有格式,我得到: 2496.0058593750000000

【讨论】:

  • 这是我正在寻找的答案,非常感谢先生!
【解决方案2】:

要提高精度,请尝试使用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)

【讨论】:

  • 这也是真的,我很感谢你的回答
猜你喜欢
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 2020-08-04
相关资源
最近更新 更多