문제

순수한 파이썬 구현이 있습니까? fractions.Fraction 그것은 지원합니다 long분자 및 분모로서? 불행히도, 지수는 플로트 (ACK !!!)를 반환하기 위해 코딩 된 것으로 보이며, 적어도 사용을 지원해야합니다. decimal.Decimal.

없다면, 아마도 도서관의 사본을 만들고 발생을 대체 할 수 있다고 생각합니다. float() 적절한 것 Decimal 그러나 나는 오히려 다른 사람들이 테스트 한 것이 오히려 무엇을하고 싶습니다.

코드 예는 다음과 같습니다.

base = Fraction.from_decimal(Decimal(1).exp())
a = Fraction(69885L, 53L)
x = Fraction(9L, 10L)

print base**(-a*x), type(base**(-a*x))

결과 0.0 <type 'float'> 대답은 정말 작은 소수점이어야합니다.

업데이트: 지금은 다음과 같은 작업을 받았습니다 (** B의 경우 둘 다 분수라고 가정합니다. 물론 Exp_가 부유물이거나 자체 자체 인 경우 다른 기능이 필요합니다) :

def fracpow(base, exp_):
    base = Decimal(base.numerator)/Decimal(base.denominator)
    exp_ = Decimal(exp_.numerator)/Decimal(exp_.denominator)

    return base**exp_

답변을 제공합니다.

추가 기능 없이이 작업을 수행하는 더 좋은 방법이 있다면 여전히 관심이 있습니다 (내가 Fraction 수업에 충분히, 다른 수레가 내 결과에 들어가는 것을 알게 될 것입니다).

도움이 되었습니까?

해결책

"전력으로의 인상"은 합리적 근거에 대한 폐쇄 된 작업이 아닙니다 (일반적인 4 개의 산술 작업과 다르게) : 이론적 번호는 없습니다. r 그렇게 r == 2 ** 0.5. 전설에 따르면 피타고라스 (이론 에서이 사실이 단순히 뒤 따르는)는 그의 제자 히파시스가 이것을 증명하는 끔찍한 범죄로 살해 당했다고한다. 당신의 이상한 사용을 감안할 때 피타고라스의 주장 된 반응을 동정하는 것처럼 보입니다.

Python의 분수는 정확한 것이므로 필연적으로 다른 분수의 힘으로 분수를 올리는 경우가 있습니다. 할 수 없는 그 결과로 분수를 반환합니다. 그리고 "해야 할 것"은 수학적 불가능에 현명하게 적용될 수 없습니다.

그래서 당신이 할 수있는 최선은 근사치를 내다 원하는 결과, 예를 들어 정확한 분수가 아닌 결과를 얻은 다음 (플로트는 일반적으로 목적을 위해 충분한 것으로 간주 됨) 분획으로 다시 근사화합니다. 대부분의 기존 Pure-Python 구현 (존재합니다 많은 rationals.py 그물 주위에 발견 된 파일 ;-) 구현하지 않는 것을 선호합니다. ** 운영자는 전혀 있지만 물론 자신의 구현에서 다른 디자인 결정을 내리는 것을 막는 것은 없습니다!-)

다른 팁

부동 소수점 지수를 사용하지 않는 분수에 대해 자신의 "POW"기능을 작성할 수 있습니다. 그게 당신이하려는 일입니까?

이것은 플로트로 다시 떨어지면서 정수 힘으로 분수를 올릴 것입니다.

def pow( fract, exp ):
    if exp == 0: 
        return fract
    elif exp % 2 == 0:
        t = pow( fract, exp//2 )
        return t*t
    else:
        return fract*pos( fract, exp-1 )
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top