好的,所以我有一个for循环,运行一个方程,将其迭代为0.005。我需要它来打印任何以.000结尾的“ L”值,而别无其他。我怎么做?
import numpy as np
import math
for D in np.arange(7, 9, 0.0050):
N = 28
n = 11
A = 7.32
P = 0.25
C = float(D)/float(P) #(P/8)*(2*L-N-n+((2*L-N-n)**(2)-0.810*(N-n)**(2))**(0.5)
L = 2*C+(N+n)/2+A/C
print("L = ", "%.3f"% float(L), '\n')
我遇到的问题:
我必须使用np.arange,因为它不允许在循环中使用浮点数。如果您能告诉我如何解决这个问题,那将是很好的。
当使用np.arange时,我将得到“ D”值,例如
D = 7.0009999999999994
L = 75.76939122982431
D = 7.001499999999999
L = 75.7733725630222
D = 7.001999999999999
L = 75.77735389888602
D = 7.002499999999999
L = 75.78133523741519
当我稍后在代码中使用这些数字时,这会导致错误
此循环需要永远的时间来计算。如果有更好的方法,请告诉我。我必须快速进行操作,否则将无法使用。
最佳答案
这篇文章解释了为什么float在python中无法正常工作:
numpy arange: how to make "precise" array of floats?
我使用下面的代码,它在计算中为D和L给出了精确的十进制3数字:
for i in range(7000, 9000, 5):
D = i/1000
print(D)
N = 28
n = 11
A = 7.32
P = 0.25
C = float(D)/float(P) #(P/8)*(2*L-N-n+((2*L-N-n)**(2)-0.810*(N-n)**(2))**(0.5)
L = 2*C+(N+n)/2+A/C
print("L = ", "%.3f"% float(L), '\n')