꼴찌 단위
Unit in the last place이 글은 검증을 위해 인용구가 추가로 필요하다.에 유닛 – · 책· · (2015년 3월 (이 템플릿 메시지 |
컴퓨터 공학 및 수치 분석에서, 마지막 위치 또는 가장 정밀도가 낮은 단위(ulp)는 연속된 두 개의 부동 소수점 사이의 간격이다. 즉, 가장 유의하지 않은 자리(가장 오른쪽 자리)가 1이면 나타내는 값이다.그것은 숫자 계산의 정확성 측도로 사용된다.[1]
정의
One definition is: In radix with precision , if , then .[2]
Another definition, suggested by John Harrison, is slightly different: is the distance between the two closest straddling floating-point numbers and (i.e., those with and 지수 범위가 상한선이 아니라고 가정하는 [3][4] .이러한 정의는 라디스의 서명된 힘에서만 다르다.[2]
IEEE 754 규격은 모든 최신 부동소수 하드웨어에 따라 기초 산술 연산(추가, 뺄셈, 곱셈, 나누기, 제곱근 1985년 이후, 2008년 이후의 FMA)의 결과를 정확하게 반올림할 것을 요구한다. 이는 반올림에서 반올림된 결과가 매트릭스의 0.5 ulp 이내임을 의미한다.John Harrison의 정의를 사용하여 정확한 결과로서, 반대로, 이 속성은 반올림된 결과와 수학적으로 정확한 결과 사이의 거리가 최소화됨을 의미한다(그러나 절반의 경우에는 연속된 두 개의 부동소수 숫자로 만족한다).평판이 좋은 숫자 라이브러리는 기본 초월 함수를 0.5에서 약 1 ulp 사이로 계산한다.일부 도서관만이 0.5 ulp 내에서 그것들을 계산하는데, 이 문제는 테이블메이커의 딜레마로 인해 복잡하다.[5]
예
예 1
x{\displaystyle)} 긍정적인 부동 소수 점 수와 활성 반올림 모드 nearest에 동그랗다고 생각하고, 심지어,를 설명 공인 등록 간호사{\displaystyle \operatorname{공인 등록 간호사}에 관계}. 만약 ulp())≤ 1{\displaystyle \operatorname{ulp}())\leq 1}, 공인 등록 간호사(x+1)을 .){\displaystyle \operatorname{공인 등록 간호사}(x+1)>자.x}.Otherwise, or , depending on the value of the least significant digit and the exponent of .이는 대화형 프롬프트에서 입력된 다음 Haskell 코드에 설명된다.[citation needed]
> (\x -) x == x+1) (+1) 0 : 1.677216e7 > it-1 1.677215e7 > it+1 1.677216e7 까지여기서는 1회의 정밀도로 시작하여 연산이 값을 변경하지 않을 때까지 1을 반복해서 추가한다.단일 정밀한 숫자에 대한 의의는 24비트를 포함하기 때문에, 정확히 표현할 수 없는 첫 번째 정수는24 2+1이고, 이 값은 2로24 반올림하여 짝수 값과 일치한다.따라서 결과는 2와24 같다.
예 2
다음 Java의 예는 : 0< >{\}}}을를) 괄호로 묶는 두 개의 이중 값을 찾음으로써 π을 부동소수 값으로 근사한다.
// 10진수 20자리 with BigDecimal π = 새로운 BigDecimal("3.14159265358979323846"); // 이중 부동 소수점까지 절단 곱절로 하다 p0 = π.이중 가치(); // -> 3.141592653589793(대략: 0x1.921fb5442d18p1) // p0이 π보다 작으므로, 두 배로 표현 가능한 다음 숫자를 찾으십시오. 곱절로 하다 p1 = 수학.넥스트업(p0); // -> 3.1415926535897936 (기호: 0x1.921fb5442d19p1) 그런 다음 ( ) )은 ( ) = - 0{\(\)=로 결정된다
// ulp(multi)는 p1과 p0의 차이다. BigDecimal 얼버무리다 = 새로운 BigDecimal(p1).뺄셈을 하다(새로운 BigDecimal(p0)); // -> 4.4408920985006169169452667236328125E-16 // (정확히 2***(-51)) // 표준 라이브러리 기능 사용 시 동일한 결과 곱절로 하다 ulpMath = 수학.얼버무리다(p0); // -> 4.440892098500626E-16 (헥스: 0x1.0p-51) 예 3
Python에서 대화형 프롬프트에 입력된 다른 예는 다음과 같다.[citation needed]
>>>x = 1.0 >>>p = 0 >>>하는 동안에 x != x + 1: ... x = x * 2 ... p = p + 1 ... >>>x 9007199254740992.0 >>>p 53 >>>x + 2 + 1 9007199254740996.0 이 경우, 먼저x = 1그리고 그것을 두 배로 반복해서 까지x = x + 1. 예 1과 마찬가지로 이중 정밀한 부동소수점 형식은 53비트 의의와 의의를 사용하기 때문에53 결과는 2이다.
언어 지원
Boost C++ 라이브러리가 기능을 제공함boost::math::float_next,boost::math::float_prior,boost::math::nextafter그리고boost::math::float_advance가까운 (및 먼) 부동소수 값을 구한다.[6]boost::math::float_distance(a, b)두 복식 사이의 부동 소수점 거리를 계산한다.[7]
C 언어 라이브러리는 주어진 방향으로 다음 부동 소수점 숫자를 계산하는 기능을 제공한다.nextafterf그리고nexttowardf을 위해float,nextafter그리고nexttoward을 위해double,nextafterl그리고nexttowardl을 위해long double, 에 선언됨<math.h>그것은 또한 매크로를 제공한다.FLT_EPSILON,DBL_EPSILON,LDBL_EPSILON이는 해당 유형에서 1.0과 다음으로 큰 표현 가능한 수 사이의 양의 차이를 나타낸다(즉, ulp 1의 ulp).[8]
Java 표준 라이브러리는 기능을 제공한다.Math.ulp(double)그리고Math.ulp(float)그들은 자바 1.5와 함께 소개되었다.
Swift 표준 라이브러리는 인스턴스(instance) 특성을 통해 지정된 방향의 다음 부동 소수점 번호에 대한 액세스를 제공한다.nextDown그리고nextUp인스턴스(instance) 특성도 제공한다.ulp유형 특성ulpOfOne(이것은 C 매크로와 같은 것에 해당한다.FLT_EPSILONSwift의 부동 소수점 유형용[9].[10]
참고 항목
- IEEE 754
- ISO/IEC 10967, 파트 1은 ulp 함수를 요구한다.
- 최하위 비트(LSB)
- 기계 엡실론
참조
- ^ 데이비드 골드버그:모든 컴퓨터 과학자가 플로팅 포인트 산술, 섹션 1.2 상대적 오류 및 Ulps, ACM 컴퓨팅 조사, Vol 23, No.1, pp.8, 1991년 3월에 알아야 할 사항
- ^ a b Muller, Jean-Michel; Brunie, Nicolas; de Dinechin, Florent; Jeannerod, Claude-Pierre; Joldes, Mioara; Lefèvre, Vincent; Melquiond, Guillaume; Revol, Nathalie; Torres, Serge (2018) [2010]. Handbook of Floating-Point Arithmetic (2 ed.). Birkhäuser. doi:10.1007/978-3-319-76526-6. ISBN 978-3-319-76525-9.
- ^ Harrison, John. "A Machine-Checked Theory of Floating Point Arithmetic". Retrieved 17 July 2013.
- ^ 뮬러, 장-미셸(2005-11)."ulp(x)의 정의에 대하여."INRIA 기술 보고서 5504.ACM Transactions on Mathemical Software, Vol. Vol. N번, 2005년 11월.2012-03년 http://ljk.imag.fr/membres/Carine.Lucas/TPScilab/JMMuller/ulp-toms.pdf에서 검색됨
- ^ Kahan, William. "A Logarithm Too Clever by Half". Retrieved 14 November 2008.
- ^ Boost float_advance.
- ^ Boost float_distance.
- ^ ISO/IEC 9899:1999 specification (PDF). p. 237, §7.12.11.3 The nextafter functions and §7.12.11.4 The nexttoward functions.
- ^ "ulpOfOne - FloatingPoint Apple Developer Documentation". Apple Inc. Apple Inc. Retrieved 18 August 2019.
- ^ "FloatingPoint - Swift Standard Library Apple Developer Documentation". Apple Inc. Apple Inc. Retrieved 18 August 2019.
참고 문헌 목록
| 무료 사전인 Wiktionary에서 fullp를 찾아 보십시오. |
- 골드버그, 데이비드(1991-03)."모든 컴퓨터 과학자가 부동 소수점 산술에 대해 알아야 할 것"의 "반올림 오류".컴퓨터 조사, ACM, 1991년 3월.http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html#689에서 검색됨.
- Muller, Jean-Michel (2010). Handbook of floating-point arithmetic. Boston: Birkhäuser. pp. 32–37. ISBN 978-0-8176-4704-9.