0
import math
t=raw_input()
k=[]
a=0
for i in range(0,int(t)):
    s=raw_input()
    b=1
    c=1
    a=int(s)
    if a==0:
        continue
    else:
        d=math.atan(float(1)/b) + math.atan(float(1)/c)
        v=math.atan(float(1)/a)
        print v
        print d
        print float(v)
        print float(d)
        while():
            if float(v)== float(d):
                break
            b=b+1
            c=c+1
            d=math.atan(float(1)/float(b)) + math.atan(float(1)/float(c))
            print d
        k.append(int(b)+int(c))

for i in range(0,int(t)):
    print k[i]

因为它非常明显float(v) != float(d),直到b变成 2 和c变成 3。

4

4 回答 4

8

您的while循环测试一个空元组,其计算结果为False. while因此,循环中的语句将永远不会执行:

如果您希望while循环运行直到遇到break语句,请执行以下操作:

while True:
    if (some_condition):
        break
    else:
        # Do stuff...
于 2009-06-15T06:41:37.680 回答
2

如果进行像 float(a)==float(b) 这样的比较是非常危险的,因为 float 变量没有精确的表示。由于舍入错误,您可能没有相同的值。

甚至 2*0.5 也可能不等于 1。您可以使用以下内容:

if abs(float(a)-float(b)) < verySmallValue:
于 2009-09-19T23:04:37.513 回答
2

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

浮点数学并不精确。像 0.2 这样的简单值不能用二进制浮点数精确表示,而浮点数的精度有限意味着运算顺序的微小变化可能会改变结果。不同的编译器和 CPU 架构以不同的精度存储临时结果,因此结果会因环境的详细信息而异。如果您进行计算,然后将结果与某个预期值进行比较,那么您将不太可能得到您想要的结果。换句话说,如果你做一个计算然后做这个比较: if (result == expectedResult)

那么这个比较不太可能是真的。如果比较结果为真,那么它可能是不稳定的——输入值、编译器或 CPU 的微小变化可能会改变结果并使比较结果为假。

于 2009-09-19T23:04:44.477 回答
0

好吧,它没有达到断点。问题是while()根本不循环。要执行无限循环,请执行while (1):(因为 while 条件必须评估为真。这是一个工作(清理)示例。

import math
t = raw_input()
k = []
a = 0.0
for i in range(0,int(t)):
    s = float(raw_input())
    b = 1.0
    c = 1.0
    a= float(s)
    if a == 0:
        continue
    else:
        d = math.atan(1.0/b) + math.atan(1.0/c)
        v = math.atan(1.0/a)
        print v
        print d
        while True:
            if v == d:
                print 'bar'
                break
            b += 1
            c += 1
            d = math.atan(1.0/b) + math.atan(1.0/c)
            print d
        k.append(int(b)+int(c))

for i in range(0,int(t)):
    print k[i]
于 2009-06-15T06:49:54.790 回答