neslib.multiprecision은 델파이와 함께 사용할 두 가지 부동 소수점 유형을 추가합니다. 이들은 Double 유형보다 최대 4 배 더 큰 정밀도를 제공합니다.
neslib.multiprecision은 QD 2.3.22 위에 구축되어 다음을 수행합니다.
이러한 유형에 사용 된 알고리즘은 David H. Bailey, Yozo Hida 및 Xiaoye S. Li에 의해 개발되었습니다. 세부 정보에 관심이 있으시면 C 서브 디렉토리의 QD.PDF 파일을 살펴보십시오.
설치하려면 :
> git clone https://github.com/neslib/Neslib.MultiPrecision이 라이브러리는 다른 라이브러리에 의존하지 않습니다. 런타임 종속성도 없습니다. 기본 C/C ++ QD 라이브러리는 객체 파일 또는 정적 라이브러리를 사용하여 실행 파일에 연결됩니다.
이 라이브러리는 두 개의 추가 부동 소수점 유형을 정의합니다.
DoubleDouble : 이것은 Double 유형의 정밀도의 두 배를 가진 128 비트 유형입니다.QuadDouble : 이것은 Double 유형의 정밀도의 4 배를 가진 256 비트 유형입니다. 두 유형 모두 이중 유형 (약 ± 10308 )과 동일한 범위를 가지지 만 정밀도가 훨씬 높습니다. Single 및 Double 에 비해 :
| 유형 | 멱지수 비트 | Mantissa 비트 | 정도 (소수 자릿수) |
|---|---|---|---|
| 하나의 | 9 | 24 | 7 |
| 더블 | 12 | 53 | 16 |
| 두 배 | 12 | 106 | 32 |
| Quaddouble | 12 | 212 | 64 |
이름은
DoubleDoubleQuadDouble의 QD 라이브러리에서 나옵니다. 대신이Float128및Float256의 이름을 지정하는 것을 고려했지만 이미 그러한 (하드웨어) 유형에 대한 공식적인 IEEE 사양이 있습니다. 그리고 이것들은DoubleDouble및QuadDouble과 호환되지 않기 때문에 혼란을 더하고 싶지 않았습니다.
기본 QD 라이브러리는 계산에 에뮬레이션을 사용 하지 않습니다 . 대신 CPU의 기존 플로팅 포인트 기능을 사용하여 2 또는 4 Double 값을 사용하여 정밀도를 높입니다. 결과적으로, 이러한 유형은 동일한 정밀도를 사용하여 다른 임의의/높은 정밀 수학 라이브러리보다 훨씬 빠릅니다. 또한 다른 많은 라이브러리와 달리 이러한 유형은 동적 메모리 할당이 필요하지 않으므로 성능을 향상시키고 메모리 조각화를 줄입니다.
이중 유형과 동일한 방식으로 DoubleDouble 와 QuadDouble Double 을 사용할 수 있습니다. 그들은 일반 연산자 ( + , - , * , / , = , <> , < , <= , > 및 >= )를 지원할뿐만 아니라 Double 유형 ( IsNan , IsInfinity , IsNegativeInfinity , IsPositiveInfinity , ToString , Parse and TryParse )에 대한 레코드 헬기에 사용할 수있는 대부분의 방법을 지원합니다. Double , DoubleDouble , QuadDouble 및 String 로 전환 할 수있는 방법과 연산자가 있습니다.
델파이 언어를 사용하면 소스 코드에 고정밀 부동 소수점 리터럴을 입력 할 수 없으므로 DoubleDouble 또는 QuadDouble 변수의 값은 다른 방식으로 초기화되어야합니다. 다양한 옵션이 있습니다 ( DD 유형이 DoubleDouble 되어 있다고 가정) :
Init 오버로드 중 하나를 사용하십시오. 예를 들어, DD.Init(1.23); Double 에서 DoubleDouble 초기화합니다.DD := DoubleDouble(1.23); .DD := DoubleDouble.Pi; .DD := '3.1415926535897932384626433832795'; .
DD := 1.23;과 같은 암시 적 연산자를 추가하지 않았습니다. , 그것들은 성능에 영향을 미치는 의도하지 않은 전환으로 이어질 수 있기 때문입니다.
DoubleDouble / QuadDouble 계산을 수행하기 전에 MultiPrecisionInit 호출하는 것이 중요합니다. 이것은 고정밀 수학을 위해 FPU/CPU를 준비합니다. MultiPrecisionReset 사용하여 FPU/CPU를 이전 상태로 복원 할 수 있습니다.
라이브러리의 기본 구성은 대부분의 응용 프로그램에 적합합니다. 이 구성은 속도를 높이기 위해 약간의 정확도를 희생합니다. 정확도가 목적을 위해 속도보다 중요하다면 MP_ACCURATE 정의로 라이브러리를 컴파일 할 수 있습니다. 이렇게하면 많은 계산이 약간 느리지 만 더 정확합니다.
기본 QD 라이브러리 (및이 라이브러리)는 다양한 일반적인 수학적 기능을 지원합니다. 또한 Neslib.multiprecision 라이브러리는 System.sysutils 및 System.math Units에서 발견 된 다양한 기능을 추가합니다.
| 이름 | 설명 |
|---|---|
| strtodoubledouble, strtoquaddouble, strtodoubledoubledef, strtoquaddoubledef, Trystrtofloat | 문자열에서 변환하십시오 |
| floattostr, floattostrf | 문자열로 변환하십시오 |
| 역 | 상호 계산 |
| rem | 나머지를 계산하고 가장 가까운 곳으로 반올림합니다 |
| divrem | 나머지를 포함하여 분할 결과를 계산합니다 |
| fmod | 0으로 반올림 된 나머지를 계산하십시오 |
| SQRT, SQR | 제곱근과 정사각형 |
| 자, 바닥, 천장, 라운드 | 다양한 반올림 방법 |
| ABS | 절대 가치 |
| Min, Max | 반환 최소 또는 최대 값 |
| Inrange, esurange | 범위와 비교하십시오 |
| 동일한 값 | 대략적인 평등 점검 |
| 전원, intpower, nroot, ldexp, exp | 지수 함수 |
| ln, lnxp1, log2, log10, logn | 로그 기능 |
| 죄, cos, sincos, tan | 삼각법 |
| arcsin, arccos, arctan, arctan2 | 역 삼각법 기능 |
| Sinh, Cosh, Sincosh, Tanh | 쌍곡선 기능 |
| Arcsinh, arccosh, arctanh | 역 쌍곡선 기능 |
| Cotan, Cot, Secant, Sec, Cosecant, CSC | 상호 삼각법 |
| Coth, Seh, Csch | 상호 쌍곡선 기능 |
| ARCCOT, ARCSEC, ARCCSC | 상호 역전 삼각법 기능 |
| Arccoth, Arcsech, Arccsch | 상호 역전 쌍곡선 기능 |
| radtodeg, radtograd, radtocycle | 라디안에서 변환 |
| Degtorad, degtograd, degtocycle | 정도에서 변환하십시오 |
| Gradtorad, Gradtodeg, Gradtocycle | 졸업생에서 변환 |
| Cycletorad, Cycletodeg, Cycletograd | 사이클에서 변환 |
고정밀 수학을 보여주는 재미있는 방법은 Mandelbrot Fractal을 계산하는 것입니다. 프랙탈을 확대 할 때 점점 더 정밀도가 필요합니다. 샘플 서브 디렉토리에는 4 레벨의 정밀도 ( Single , Double , DoubleDouble , QuadDouble )에서 만델 브로트 프랙탈을 생성하는 Firemonkey 응용 프로그램이 포함되어 있습니다.
다음 이미지는 1 사 20 명 (10 15 , 유럽의 1 개의 당구) 및 Double 정밀도를 사용하여 프랙탈의 작은 부분을 보여줍니다.

이 Double 이이 배율 수준에서 충분한 정밀도를 제공하지 않는다는 것을 분명히 알 수 있습니다. DoubleDouble 유형은 충분한 정밀도를 제공합니다.

확대 수준 10 31 에 도달하기 전까지는 QuadDouble 로 전환해야합니다.
Neslib.multiprecision에는 위에서 설명한 것보다 더 많은 것이 있습니다. 자세한 내용은 잘 문서화 된 Neslib.MultiPrecision.pas 소스 파일을 살펴보십시오. 추가 사용 샘플은 UnitTests 하위 디렉토리 및 MandelBrot 샘플 응용 프로그램에서 찾을 수 있습니다.
이러한 유형에 사용되는 기술 세부 사항 및 알고리즘에 관심이있는 경우 C 서브 디렉토리의 QD.PDF 파일을 살펴볼 수 있습니다.
말했듯이,이 라이브러리는 QD 라이브러리 위에 있습니다. 이것은 객체 파일 또는 정적 라이브러리를 사용하여 Delphi 실행 파일에 연결된 C/C ++ 라이브러리입니다. 이러한 객체 파일과 정적 라이브러리를 직접 빌드 해야하는 경우 C 서브 디렉토리의 readme.txt 파일을 살펴보십시오.
neslib.multiprecision은 단순화 된 BSD 라이센스에 따라 라이센스가 부여됩니다. 자세한 내용은 License.txt를 참조하십시오.
기본 QD 라이브러리는 BSD-LBNL 라이센스에 따라 라이센스가 부여됩니다. 자세한 내용은 C 서브 디렉토리의 BSD-LBNL-License.doc 문서를 참조하십시오.