2017-05-21 2 views
0

모두 ... 나는 우분투 OS에서 파이썬 3을 사용하고 있습니다. 대수학 연산에 대한 한계가 있습니까? 예를 들어, 여러 요인의 곱을 합한 표현식을 사용하고 있습니다. 예대수 연산에서 정밀도를 잃어 버리는 지 어떻게 알 수 있습니까?

 - 19 * a[15] * a[16]**5 
    - 19 * a[15] * a[18]**15 
    + 114 * a[15]**2 * a[18]**11 
    - 228 * a[15]**3 * a[18]**7 
    + 19 * a[15]**4 * a[16] 
    + 95 * a[15]**4 * a[18]**3 
    + 19 * a[16] * a[17]**8 
    + ... 

분명히 전체 표현식은 "a"라는 목록 내의 각 요소를 사용합니다. 내가 precission를 잃어버린하고있는 경우 모르겠어요

a = [402481529333452799737856, 584701242576216277385216, 381624405337102891352064, 149810598966570642309120, 39872669983907831087104, 7677351509657277956096, 1112790794949098209280, 124591361265902845952, 10959810498173202432, 765616198595219328, 42719502536872064, 1906692221880063, 67880221932168, 1912942704676, 42095054406, 707502567, 8765436, 75402, 402] 

는, (이론에 기반을 둔) 내 예상 응답이 3667707174836348186431483911144하고 얻어진

가에 (당신이 통지로 diference가 매우 작고, 3667707189516889659417305507748입니다 중간 작업에서 숫자의 크기와 대비) 및 이러한 이유로 나는 계산 작업에서 precission 잃어버린 생각합니다. 나는 많은 정보를 줄 수 없다. 사과한다. 그래서 질문은 ... 순수 파이썬에서 선결을 잃을 수 있습니다. 만약 내가 다른 큰 숫자를 사용하여, 기본 작업 (추가, substract, 제품, 등)에 영향을 받습니까?

답변

1

정수로만 작업하는 경우 정확도를 잃지 않습니다.

대수 연산이 유리수에만 적용되고 숫자의 뿌리를 피할 경우 fractions 모듈을 사용할 수 있으며 정확도를 잃지 않도록합니다.

그렇지 않으면 위의 두 가지 경우 중 하나에 해당하는 조작을 구성하지 않으면 정밀도가 떨어집니다.

+0

나는 정수로 작업 할 것이라고 확신하지만, "a"라는 목록에는 작은 정수가있다. (솔직히 말해서 나의 예제에서 주어진 것보다 적지 않다.) 모든 경우에 나는 같은 수를 얻는다. .. 표현은 제품과 합계로 이루어지며 다른 작업은 없습니다. 그러나 전체 표현식은 파일에 저장되고 "eval"을 사용하는 함수에 의해 읽혀집니다 ... 이것은 문제가 될 수 있습니까? – Alexis

+0

@Alexis : 파이썬은 어떤 크기의 정수에서도 작동 할 수 있으므로 'eval'을 사용하는 코드에는 문제가 있습니다. – Blender

+0

내 사과, 내가 실수를 어디에서 발견 했어 ... 실수는 전체 모듈과 관련된 다른 모듈 (특히 numpy 함수라는 poly1d)입니다. 다른 말로하면 : 나의 실수는 목록의 가치를 얻는 과정에 있었다. 신경 쓰지 마. 고마워요!. – Alexis

관련 문제