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]

2 になって 3 になるfloat(v) != float(d)までは非常に明白です。bc

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 変数には正確な表現がないため、 float(a)==float(b) のような比較を行うのは非常に危険です。丸め誤差により、同一の値が得られない場合があります。

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 のような単純な値は、2 進浮動小数点数を使用して正確に表現することはできません。また、浮動小数点数の精度が限られているため、演算の順序を少し変更すると結果が変わる可能性があります。コンパイラや CPU アーキテクチャが異なると、一時的な結果が異なる精度で格納されるため、環境の詳細によって結果が異なります。計算を行って、その結果を何らかの期待値と比較すると、意図したとおりの結果が得られる可能性はほとんどありません。つまり、計算を行ってから次の比較を行う場合: if (result == expectedResult)

その場合、比較が真になる可能性は低いです。比較が真の場合、おそらく不安定です。入力値、コンパイラ、または CPU のわずかな変更によって結果が変化し、比較が偽になる可能性があります。

于 2009-09-19T23:04:44.477 に答える
0

まあ、それはブレークポイントに達しませんでした。問題は、while()まったくループしないことです。無限ループを実行するには、while (1):(while 条件が true に評価される必要があるため) を実行します。これは、動作する (クリーンアップされた) サンプルです。

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 に答える