Python과 Fortran77이이 분수에 대해 다른 값을 반환하는 이유는 무엇입니까?

Jasmeru

간단히 말해서, Python이 저에게 더 편리하기 때문에 제 고문이 저에게 보낸 Fortran77 코드를 Python으로 다시 작성하려고합니다. 내 코드를 테스트하는 동안 내 출력이 Fortran 코드와 약간 다르다는 것을 깨달았습니다. 그리고이 모든 것이 Fortran의 반올림 오류 또는 기타 문제에서 비롯된 것 같습니다.

예를 들어 277./14336.Python 의 분수 는 다음을 반환합니다.

print(277./14336.)
> 0.019321986607142856
            ^

그러나 Fortran77에서는 다음을 얻습니다.

program foo
  implicit none
  real*8 x
  x=277./14336.
  write(*,*) x
end program
> 1.9321987405419350E-002
          ^

따라서이 숫자는 일반적으로 충분해야하는 8 번째 유효 숫자까지 동일합니다. 그러나 수치 정확도를 평가하려고 할 때 내 코드 (정확히 10 ^ 8의 순서 1 부분)가 미세 조정 된 취소가 있으므로 Fortran의 오류 추정치는 때때로 Python 코드의 두 배가됩니다.

무슨 일이야? 처음에는 Fortran이 32 비트에서 실행되고 Python이 64 비트에서 실행 되었기 때문이라고 생각했습니다. 하지만 32 비트 버전의 Python을 실행했을 때 동일한 결과를 얻었습니다 (아직 64 비트 OS를 사용하고 있었기 때문에 차이가 있었는지 모르겠습니다) real*8. Fortran에서 8 바이트 정밀도를 의미한다는 것을 읽었습니다 . 또는 64 비트. Python과 Fortran에서 부동 소수점 숫자의 표현에 근본적인 차이점이 있습니까?

Barmar

Python의 대답이 더 정확합니다.

Fortran에서는 결과를 64 비트 부동 소수점에 할당하지만 입력은 32 비트 부동 소수점입니다. 따라서 분할은 32 비트 모드에서 수행되고 결과는 할당에서 64 비트로 확장됩니다.

계산에 64 비트 부동 소수점을 사용하면 적절한 결과를 얻을 수 있습니다.

$ cat div.f90
Program div
  Use, Intrinsic :: iso_fortran_env, Only :  wp => real64
  Implicit None
  Real( wp ) :: x
  x = 277.0_wp / 14336.0_wp
  Write( *, * ) x
End Program div
$ gfortran -Wall -Wextra -std=f2008 -fcheck=all div.f90 
$ ./a.out
   1.9321986607142856E-002

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

DATEDIF가 이러한 값에 대해 다른 결과를 반환하는 이유는 무엇입니까?

분류에서Dev

GetDC가 동일한 개체에 대해 다른 값을 반환하는 이유는 무엇입니까?

분류에서Dev

keys () 및 items () 메서드가 동일한 키에 대해 다른 부울 값을 반환하는 이유는 무엇입니까? (Python 3.6)

분류에서Dev

cProfile로 인해 함수가 다른 값을 반환하는 이유는 무엇입니까?

분류에서Dev

AES 함수가 다른 값을 반환하는 이유는 무엇입니까?

분류에서Dev

AngularJS 함수에서 부울을 반환하는 것이 속성과 다른 이유는 무엇입니까?

분류에서Dev

결과에 대해 계속해서 0을 반환하는 이유는 무엇입니까?

분류에서Dev

time () 함수가 다른 서버에서 다른 값을 반환하는 이유는 무엇입니까?

분류에서Dev

이 자바 스크립트 함수가 동일한 쿼리에 대해 두 개의 다른 결과를 반환하는 이유는 무엇입니까?

분류에서Dev

print_r과 return이 다른 값을 반환하는 이유는 무엇입니까?

분류에서Dev

내 ML 함수에 대해 유추 된 유형이 예상과 다른 이유는 무엇입니까?

분류에서Dev

FloatToText가 다른 프로젝트에서 다른 값을 반환하는 이유는 무엇입니까?

분류에서Dev

ss (8)이 netstat (8)과 다른 UDP 포트 수신을 이해하는 이유는 무엇입니까?

분류에서Dev

OpenCV가 픽셀 강도에 대해 이상한 값을 반환하는 이유는 무엇입니까?

분류에서Dev

다항 회귀가 다른 등급에 대해 동일한 결과를 반환하는 이유는 무엇입니까?

분류에서Dev

SQL Server가 1보다 작은 양수 상한값에 대해 0을 반환하는 이유는 무엇입니까?

분류에서Dev

자바 : 같은 부동 소수점 값에 대해 16 진수 값이 다른 이유는 무엇입니까?

분류에서Dev

ADL이 연산자 기능에 대해 다른 기능과 다른 동작을하는 이유는 무엇입니까?

분류에서Dev

Android 및 JavaScript로 AES / CBC / ZeroBytePadding에서 암호화하면 일부 문자열에 대해 다른 결과가 반환되는 이유는 무엇입니까?

분류에서Dev

setpixel에 의해 설정된 픽셀이 getpixel에서 다른 값을 반환하는 이유는 무엇입니까?

분류에서Dev

Sequel Pro가 명령 줄에서 MySQL과 테이블의 키 값에 대해 다른 결과를 표시하는 이유는 무엇입니까?

분류에서Dev

AWS Lambda 함수가 백엔드와 다른 응답 값을 반환하는 이유는 무엇입니까?

분류에서Dev

SQL Union 쿼리가 수동 SELECT WHERE 쿼리와 다른 값을 반환하는 이유는 무엇입니까?

분류에서Dev

printf와 cout이이 코드에 대해 다른 출력을 제공하는 이유는 무엇입니까?

분류에서Dev

식 개체를 어디에 전달하면 람다 식을 입력하는 것과 다른 결과가 반환되는 이유는 무엇입니까?

분류에서Dev

결과가 실제 값 대신 16 진수를 반환하는 이유는 무엇입니까?

분류에서Dev

XmlReader.IsEmptyElement가 다른 값을 반환하는 이유는 무엇입니까?

분류에서Dev

무엇보다 큰 모든 값에 대해 팬더 데이터 프레임을 스캔하고 해당 값에 해당하는 행과 열 번호를 반환하는 방법은 무엇입니까?

분류에서Dev

WSASendMsg가 accept ()에서 반환 된 소켓에 대해 WSAEINVAL을 반환하는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    DATEDIF가 이러한 값에 대해 다른 결과를 반환하는 이유는 무엇입니까?

  2. 2

    GetDC가 동일한 개체에 대해 다른 값을 반환하는 이유는 무엇입니까?

  3. 3

    keys () 및 items () 메서드가 동일한 키에 대해 다른 부울 값을 반환하는 이유는 무엇입니까? (Python 3.6)

  4. 4

    cProfile로 인해 함수가 다른 값을 반환하는 이유는 무엇입니까?

  5. 5

    AES 함수가 다른 값을 반환하는 이유는 무엇입니까?

  6. 6

    AngularJS 함수에서 부울을 반환하는 것이 속성과 다른 이유는 무엇입니까?

  7. 7

    결과에 대해 계속해서 0을 반환하는 이유는 무엇입니까?

  8. 8

    time () 함수가 다른 서버에서 다른 값을 반환하는 이유는 무엇입니까?

  9. 9

    이 자바 스크립트 함수가 동일한 쿼리에 대해 두 개의 다른 결과를 반환하는 이유는 무엇입니까?

  10. 10

    print_r과 return이 다른 값을 반환하는 이유는 무엇입니까?

  11. 11

    내 ML 함수에 대해 유추 된 유형이 예상과 다른 이유는 무엇입니까?

  12. 12

    FloatToText가 다른 프로젝트에서 다른 값을 반환하는 이유는 무엇입니까?

  13. 13

    ss (8)이 netstat (8)과 다른 UDP 포트 수신을 이해하는 이유는 무엇입니까?

  14. 14

    OpenCV가 픽셀 강도에 대해 이상한 값을 반환하는 이유는 무엇입니까?

  15. 15

    다항 회귀가 다른 등급에 대해 동일한 결과를 반환하는 이유는 무엇입니까?

  16. 16

    SQL Server가 1보다 작은 양수 상한값에 대해 0을 반환하는 이유는 무엇입니까?

  17. 17

    자바 : 같은 부동 소수점 값에 대해 16 진수 값이 다른 이유는 무엇입니까?

  18. 18

    ADL이 연산자 기능에 대해 다른 기능과 다른 동작을하는 이유는 무엇입니까?

  19. 19

    Android 및 JavaScript로 AES / CBC / ZeroBytePadding에서 암호화하면 일부 문자열에 대해 다른 결과가 반환되는 이유는 무엇입니까?

  20. 20

    setpixel에 의해 설정된 픽셀이 getpixel에서 다른 값을 반환하는 이유는 무엇입니까?

  21. 21

    Sequel Pro가 명령 줄에서 MySQL과 테이블의 키 값에 대해 다른 결과를 표시하는 이유는 무엇입니까?

  22. 22

    AWS Lambda 함수가 백엔드와 다른 응답 값을 반환하는 이유는 무엇입니까?

  23. 23

    SQL Union 쿼리가 수동 SELECT WHERE 쿼리와 다른 값을 반환하는 이유는 무엇입니까?

  24. 24

    printf와 cout이이 코드에 대해 다른 출력을 제공하는 이유는 무엇입니까?

  25. 25

    식 개체를 어디에 전달하면 람다 식을 입력하는 것과 다른 결과가 반환되는 이유는 무엇입니까?

  26. 26

    결과가 실제 값 대신 16 진수를 반환하는 이유는 무엇입니까?

  27. 27

    XmlReader.IsEmptyElement가 다른 값을 반환하는 이유는 무엇입니까?

  28. 28

    무엇보다 큰 모든 값에 대해 팬더 데이터 프레임을 스캔하고 해당 값에 해당하는 행과 열 번호를 반환하는 방법은 무엇입니까?

  29. 29

    WSASendMsg가 accept ()에서 반환 된 소켓에 대해 WSAEINVAL을 반환하는 이유는 무엇입니까?

뜨겁다태그

보관