質問

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になってます。

役に立ちましたか?

解決

whileと評価空のタプル、上のあなたのFalseループテスト。このように、whileループ内のステートメントを実行することはありません。

あなたはそれがwhile文を検出するまで、あなたのbreakループを実行したい場合は、次の操作を行います。

while True:
    if (some_condition):
        break
    else:
        # Do stuff...

他のヒント

フロートのようなcomparsisonsを作ることは非常に危険である場合には(A)==フロート(b)のフロート変数には、正確な表現を持っていないので。丸め誤差に、あなたは同じ値を持っていない可能性があります。

あなたは、次を使用することができます1.

でも2 * 0.5は一致しない場合があります。

if abs(float(a)-float(b)) < verySmallValue:

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

  

浮動小数点演算は正確ではありません。   0.2のような単純な値にすることはできません   正確にバイナリを使って表現   浮動小数点数、および   浮動小数点の限られた精度   数字は、その中にわずかな変化を意味し、   動作の順序は変更することができます   結果。異なるコンパイラとCPU   アーキテクチャは、一時的な結果を格納します   異なる精度で、結果はそう   内容によって異なります   お使いの環境の。もしあなたが   計算して、比較します   いくつかの期待値は、それに対する結果   あなたが取得する可能性はほとんどありません   あなたが意図を正確に結果。に   言い換えれば、あなたは計算を行う場合   その後、この比較を行います。if   (結果== expectedResult)

     

それはないようです   比較はtrueになります。もし   比較が真である、それはおそらくです   不安定 - 入力における小さな変化   値は、コンパイラ、またはCPUが変更される可能性があり   結果との比較を可能にします   偽ます。

まあ、それはブレークポイントに到達しませんでした。問題はwhile()が全くループをしないということです。無限ループを実行するには、while条件がtrueに評価しなければならないので、(while (1):を行うこと。ここでは、クリーンアップ作業()のサンプルです。

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]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top