Python 不平等问题:0<=-0.0不是真的

Python 不平等问题:0<=-0.0不是真的,python,zero,inequalities,Python,Zero,Inequalities,我在for循环中有一个if语句,它通过x的数值运行,并根据x计算h的值。我已经包括了下面的代码。在时间零点(t=0.0)xa=-0.0和xb=0.0 当x=0时,问题就会出现。在x=0时,如果x小于或等于0,我希望代码跟随第一个语句。然而,它不会返回到最后一个if语句并执行该语句。现在我的想法是,问题与x=0和xa=-0.0有关,python不喜欢这样 如果有人能解释为什么会发生这种情况,如果有解决问题的办法,或者确实存在不同的问题,那就太好了 __author__="ahe" __date__

我在for循环中有一个if语句,它通过x的数值运行,并根据x计算h的值。我已经包括了下面的代码。在时间零点(
t=0.0
xa=-0.0
xb=0.0

x=0
时,问题就会出现。在
x=0
时,如果
x
小于或等于
0
,我希望代码跟随第一个
语句。然而,它不会返回到最后一个if语句并执行该语句。现在我的想法是,问题与
x=0
xa=-0.0
有关,python不喜欢这样

如果有人能解释为什么会发生这种情况,如果有解决问题的办法,或者确实存在不同的问题,那就太好了

__author__="ahe"
__date__ ="$05-Aug-2014 11:22:44$"

import numpy as np
import matplotlib.pyplot as plt 
import math 
import sys
from math import sqrt  
import decimal
import pylab 

nx, ny = (100,100)
x5 = np.linspace(-2000,2000,nx)
y5 = np.linspace(0,600,ny)
xv,yv = np.meshgrid(x5,y5)
x = np.arange(-2000.0,2001.0,1.0)
print len (x)

h0=0.03
g=9.81
t=0.0

term1=4.0/(9.0*g)
term2=math.sqrt(g*h0)
print 'term1=',term1,'term2=',term2 

xa=-term2*t
xb=term2*2*t

h=np.zeros(len(x))

for i in range (len(x)):
   if x[i]<=xa:
      h[i]=h0
   elif (xa<x[i]<xb):
      h[i]=term1*((term2-(x[i]/(t*2.0)))**2.0)
   else:
      h[i]=0


print 'xa=',xa,'xb=',xb

h1=np.zeros(len(x))

f = open(r'C:\opentelemac\bluetang\examples\telemac2d\ritter\4D0.i3s', 'r')
while True:
   line = f.readline()
   if line[0] not in [':','#']: break
ran = int(line.split()[0])
length = np.zeros(ran)
wse =  np.zeros(ran)
for i in range (ran):
   fields = f.readline().split()
   length[i] = float(fields[0])
   wse[i] = float(fields[2])
   all =[length[i],wse[i]]

print x[1995:2005]
print h[1995:2005]



plt.figure(2)
plt.plot(length,h, marker='o', linestyle='--')
plt.plot(length,wse)
plt.legend(['Analytical solution_0','Model_0'], loc='upper right')
plt.show()
作者
__日期:“(2014年8月5日11:22:44$”
将numpy作为np导入
将matplotlib.pyplot作为plt导入
输入数学
导入系统
从数学导入sqrt
输入小数
进口派拉布
nx,ny=(100100)
x5=np.linspace(-20002000,nx)
y5=np.linspace(纽约州0600)
xv,yv=np.网格(x5,y5)
x=np.arange(-2000.02001.0,1.0)
打印透镜(x)
h0=0.03
g=9.81
t=0.0
term1=4.0/(9.0*g)
term2=数学sqrt(g*h0)
打印“term1=”、term1、“term2=”、term2
xa=-term2*t
xb=端子2*2*t
h=np.零(len(x))
对于范围内的i(len(x)):
如果x[i]实际上是真的

Python 2.7.4 (default, Sep 26 2013, 03:20:26) 
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 0 <= -0.0
True
Python 2.7.4(默认,2013年9月26日03:20:26)
[GCC 4.7.3]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。

>>>0你确定你有准确的
0
-0.0
?欢迎来到奇妙的浮点世界。我怀疑xa变量“-0.0”是一个接近于零的实际值,但它是一个小于零的极小值。例如,'-0.0000000000000000000000 1“,调试器和python打印语句只是将其呈现为“-0.0”。因此,表达式
0请尝试调试器并查看
x[i]的值是多少-xa
。它绝对不是零。好的,谢谢你的快速回复,这很有意义。我将尝试调试器。有没有一种方法可以让Estbalishing精确地指定数字,而不是数字的四舍五入版本?@user3771983 Bartosz告诉它非常好-你应该在如何诊断问题上投入一些精力。非常好的调试器简介是在