2013-12-15 4 views
-3

파이썬에서 실수를 근사 정밀도 10^-3으로 근사하는 프로그램을 작성하려고합니다. 여기 내가 한 일이 있습니다. 나는 무엇이 잘못되었는지를 모릅니다. 누군가 나를 도울 수 있습니까? "시계 추가"를 사용합니다. 누군가가 저에게 뭐가 잘못 됐는지 말해 줄 수 있습니까? 미리 감사드립니다.파이썬에서 분수로 실수를 근사하는 것

from math import * 

def restriction(x,a,b,c,d): 

    if x<(a+b)/(c+d): 
     return [x,a,b,a+c,b+d] 
    if x>(a+b)/(c+d): 
     return [x,a+c,b+d,c,d] 

def cancres(x,a,b,c,d,prec): 

    if x==a/b or x==c/d: 
     return x 
    elif x<a/b or x>c/d: 
     return False 
    else: 
     w=restriction(x,a,b,c,d) 
     i=0 
     if (w[3]/w[4]-w[2]/w[1])>prec: 
      w=restriction(x,w[1],w[2],w[3],w[4]) 
      print w 
      i+=1 
    return w 

print cancres(sqrt(3),3,2,2,1,10^(-3)) 
+0

음, ** 무엇이 잘못 되었나요? –

+0

^멱승을하지 않습니다. 10^(- 3)을 10 ** (- 3)으로 바꾸십시오. – casevh

+0

분수를 찾지 못할 것입니다. 계산에 형식 오류가있을 수 있다고 생각합니다. – Asinus

답변

0

프로그램에 몇 가지 오류가 있습니다. 첫째, 표현 10^(-3)은 0.001로 평가되지 않습니다. ^은 두 개의 정수 사이의 배타적 또는 비트 별 연산에 사용됩니다. 파이썬은 지수에 **을 사용합니다.

둘째, Python 2.x를 사용하고있는 것 같습니다. 파이썬 2.x는 기본적으로 정수 나누기를 사용합니다. 따라서 3/2은 1.5가 아니라 1을 반환합니다. Python 3.x는 동작을 변경하여 float를 반환합니다. Python 2.x에서는 각 부분의 피연산자 하나를 부동 소수점으로 변환하거나 from __future__ import division을 사용하여 Python 2.x에서 Python 3.x 스타일 분할을 사용해야합니다.

라인 if (w[3]/w[4]-w[2]/w[1])>prec:에는 세 가지 오류가 있습니다. w[3]/w[4] 대신 w[4]/w[3]이어야합니다. prec과 비교하기 전에 절대 값을 취해야합니다. 반복 루프를 수행하려고 시도하므로 if 대신 while을 사용해야합니다.

내가 처리하지 않은 다른 디자인 및 스타일 문제가 있지만 코드가 작동하는 것 같습니다.

from __future__ import division 
from math import * 

def restriction(x,a,b,c,d): 

    if x<(a+b)/(c+d): 
     return [x,a,b,a+c,b+d] 
    if x>(a+b)/(c+d): 
     return [x,a+c,b+d,c,d] 

def cancres(x,a,b,c,d,prec): 

    if x==a/b or x==c/d: 
     return x 
    elif x<a/b or x>c/d: 
     return False 
    else: 
     w=restriction(x,a,b,c,d) 
     i=0 
     while (abs(w[4]/w[3]-w[2]/w[1]))>prec: 
      w=restriction(x,w[1],w[2],w[3],w[4]) 
      print w 
      i+=1 
    return w 

print cancres(sqrt(3),3,2,2,1,10**(-3)) 
+0

나는'1E-3'이'10 ** (- 3)'보다 더 명확하고 (타이프하기 더 쉽다고) 주장 할 것이다. – SethMMorton

+0

많은 감사합니다! 나는이 Python 3 대 Python 2에 대해 몰랐다. – Asinus

관련 문제