부동 소수점 정확도/비교 문제를 해결 하는 방법

만료된 KB 콘텐츠 고지 사항

이 문서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 작성되었습니다. 따라서 이 문서는 “있는 그대로" 제공되며 더 이상 업데이트되지 않습니다.

요약

두 여부를 안정적으로 테스트 하려면 부동 소수점 변수 또는 식을 같은지 (IEEE 형식 또는 MBF 사용), 비교 되는 두 개의 변수 빼고 한 개의 단일 또는 이중 정밀도 유의 제한을 때 선택한 값을 보다 작은 있는지 테스트 해야 합니다. 같은지 테스트 신뢰할 수 있습니다. 다음 수식에는 안정적으로 X 및 Y 같은지 여부를 테스트:


  1. 단 정밀도 대 한 테스트 해야 여부 차 X, Y는 X 보다 작은 값 7 유효 자릿수 또는 까지인 나누기 X 또는 Y 미만 10 ^7 비교 값을. 예를 들어:
          ' To try this example in VBDOS.EXE:      ' 1. From the File menu, choose New Project.
    ' 2. Copy the code example to the Code window.
    ' 3. Press F5 to run the program.

    IF ABS(X! - Y!) <= (X! / 10^7) THEN
    PRINT "Equal within 7 digits"
    ENDIF

  2. 이중 정밀도 대 한 테스트 해야 하는지 X의 차이, Y는 X 보다 작은 값 15 유효 자릿수 또는 까지인 나누기 X 또는 Y 미만 10 ^15 비교 값을. 예를 들어:
          ' To try this example in VBDOS.EXE:      ' 1. From the File menu, choose New Project.
    ' 2. Copy the code example to the Code window.
    ' 3. Press F5 to run the program.

    IF ABS(X# - Y#) <= (X# / 10^15) THEN
    PRINT "Equal within 15 digits"
    ENDIF

MS-DOS 버전 1.0; 표준 및 Microsoft Visual Basic의 Professional Edition의 있으면 IEEE 부동 소수점 형식 (QB87 MS-DOS 용 Microsoft QuickBasic에서. EXE 보조 프로세서 버전에만 해당), 버전 3.0, 4.0, 4.0b, 및 4.5; Microsoft 기본 컴파일러 버전 6.0 및 6.0b; MS-DOS 및 MS o S/2에서 및에서 Microsoft 기본 전문 개발 시스템 (PDS) 버전 7.0 및 7.1 MS-DOS 및 MS OS/2.


MBF (Microsoft 이진 형식) (QB MS-DOS 용 Microsoft QuickBasic에 있습니다. EXE 보조 프로세서가 아닌 버전에만 해당), 버전 1.0, 1.01, 2.0, 2.01, 및 3.0 및 Microsoft GW Basic 인터프리터 ms-dos, 버전 3.2, 3.22, 3.23.


이 문서의 정보는 MS-DOS 버전 1.0 표준 및 Microsoft Visual Basic의 Professional Edition의 함께 제공 된 도움말 파일에도 포함 됩니다.

자세한 내용

참고: 계산 된 숫자에서 유효 자릿수 인해 다음 손실 될 수 있습니다: 숫자 값에서 멀리 떨어져 특히 더하기 또는 빼기 숫자 값이 비슷한 여러 계산 합니다. 여러 가지 계산에서 숫자 결과 때 적은 수의 유효 숫자 유효 자릿수 수학 손실을 반영 하도록 사용할 같음 테스트를 변경 해야 합니다. 너무 많은 유효 자릿수를 사용 하는 테스트의 중요성 발견 숫자가 같은지 비교 하 여 실제로 정확도 가능한 한도 내에서 동일 하다 실패할 수 있습니다.



기본 제품에서 위에 나열 된 IEEE 부동 소수점 형식을 사용 하는, 단일 정밀도 또는 이중 정밀도 변수에 저장 된 것 보다 정확도 이상의 비트가 있는 있는 내부 64 비트 임시 레지스터를 중간 계산이 수행 됩니다. 이 인해 IF 문이 중간 계산 비교 되는 식으로 같은지 어떤 상태 오류를 반환 합니다. 예를 들어:
   X = 25   Y = 60.1
IF 1502.5 = (X * Y) THEN PRINT "equal"

위의 코드를 실행 "같음" 인쇄 됩니다. 반면, 개체 틀 변수를 사용 하 여 다음 방법 "같음" 인쇄 있지만 여전히 신뢰할 수 있는 기술이 결코 아닙니다 같은지 테스트로:
   Z = 25 * 60.1   IF 1502.5 = Z THEN PRINT "equal"

명시적 숫자 형식을 캐스팅 노트 (! 단 정밀도, 배정밀도에 대 한 #에 대 한) 계산의 저장 및 인쇄 정밀도 영향을 줍니다. 을 수행 하면 어떤 형식 캐스팅 여전히 반올림 예기치 않은 결과가 표시 됩니다.
   PRINT 69.82! + 1    ' Single precision, prints 70.82.   PRINT 69.82# + 1    ' Double precision, prints 70.81999999999999.

정확한 10 진수 (10 기 수) 숫자 표시와 같은 형식으로 달러와 센트를 계산 하기 위한 사용 해야 통화 (@) 데이터 형식이 Visual Basic에서 볼 수 있는 MS-DOS, 버전 1.0 및 기본 PDS MS-DOS 버전 7.0 및 7.1. 통화 데이터 형식을 정확히 4 자리 소수 자릿수가 최대 19 자리까지 저장합니다.


참조:


IEEE 및 MBF 표준을 정확성 및 정밀도 숫자 범위 및 속도 균형을 시도 합니다. 중요 한 비트 정밀도 수 계산에 끊기지는 정확도 측정 합니다. 정밀도 소수 자릿수를 표현할 수 결정 하는 수 비트 수를 나타냅니다.


IEEE 형식 및 MBF 모두 폼의 번호를 저장 1.x y의 거듭제곱 (여기서 x 및 y 기본 2 숫자; x가 수 이며 y 지 수).


MBF 단일 정밀도 24 비트가 수가 있고 배정밀도 56 비트가 수 있습니다. 모든 MBF 계산 단지 24 또는 56 비트 내에서 수행 됩니다.


IEEE 단일 정밀도 24 비트가 수가 고 이중 정밀도 53 비트가 수의. 그러나 모든 단정도 및 배정도 IEEE 계산 Visual Basic에서 ms-dos, 버전 1.0; QuickBasic ms-dos, 버전 3.0/4.x; MS-DOS 버전 6.0 및 6.0b;에 대 한 기본 컴파일러 기본 PDS ms-dos, 버전 7.0 및 7.1re는 정확성을 높이기 위해 64 비트 임시 레지스터에서 수행 하 고 있습니다. 따라서 IEEE 계산은에서 배정밀도 이상의 비트를 나타내는 MBF의 능력에도 불구 하 고 MBF 계산 보다 더 정확 합니다.


대부분 숫자 10 진수 (10 기 수) 표기법으로 단 정밀도 및 이중 정밀도 데이터 형식에 사용 되는 이진 (2 진법) 부동 소수점 저장소 형식으로 정확 하 게 나타내지는 갖지 않습니다. IEEE 형식 및 MBF 모두 정확 하 게 나타낼 수 없습니다 (및 반올림 합니다) 폼의 없는 모든 숫자 1.x y의 거듭제곱 (여기서 x 및 y 기본 2 숫자). 정확 하 게 나타낼 수 있는 숫자에 걸쳐 매우 다양 합니다. 표현 가능한 숫자의 고밀도 1.0,-1.0 근처 이지만 적어집니다 표현 가능한 숫자 숫자 0 이나 무한으로 발생 합니다.


위의 제한 사항을 예상 보다 다른 부동 소수점 결과 반환 하는 기본을 야기 하기도 합니다. 이 항목에 대 한 자세한 내용은 다음 단어를 쿼리하여 Microsoft 기술 자료에서 찾을 수 있습니다.
부동 및 지점 및 형식 및 QuickBasic
IEEE 부동 소수점 형식은 다음 설명서에서 설명:


  1. 페이지 16-21의 "Microsoft QuickBasic 4.0:: 기본 언어 참조" QuickBasic에 대 한 MS-DOS 버전 4.0 및 4.0b. Note 4.0 설명서 Microsoft 기술 자료에서 다음 단어를 쿼리하여 찾을 별도 문서에서 설명한 대로 수정 19 MHex$ 코드 예제에서는 페이지에 필요 하다.
    MHex$ 19와
  2. 페이지 12-17의 "Microsoft QuickBasic 4.5:: 기본 언어 참조" QuickBasic ms-dos, 버전 4.5에 대 한. 노트가 선택적 수동 별도로 버전 4.5 제공 된 주문 카드를 사용 하 여 주문 해야 합니다.
  3. 702-705의 페이지 있는 "Microsoft Basic 7.0: 프로그래머용 가이드" Microsoft 기본 PDS ms-dos, 버전 7.0 및 7.1에 대 한.
MBF 부동 소수점 형식 있는 Microsoft 기술 자료에서 다음 단어를 쿼리하여 별도 문서에서 설명 됩니다.
MBF 및 변환을 앤 지 수
속성

문서 ID: 69333 - 마지막 검토: 2017. 2. 7. - 수정: 1

피드백