กลับไปหน้าบทความ

อ่าน 4 นาที

ไลบรารีการคำนวณเลขความแม่นยำสูง GNU

GNU Multiple Precision Arithmetic Library ( GMP ) เป็น ไลบรารี ฟรีสำหรับ การ คำนวณเลขคณิตความแม่นยำสูงโดยทำงานกับจำนวนเต็มที่มีเครื่องหมาย จำนวนตรรกยะและจำนวนทศนิยม...

ไลบรารีการคำนวณเลขความแม่นยำสูง GNU

ไลบรารีการคำนวณเลขความแม่นยำสูง GNU
นักพัฒนาโครงการ GNU
ปล่อย1991 [ 1 ] ( 1991 )
เวอร์ชันเสถียร
6.3.0 [ 2 ] [ 3 ] แก้ไขข้อมูลนี้บนวิกิดาต้า / 30 กรกฎาคม 2023
เขียนเป็นC ( C++ , ภาษาแอสเซมบลีเป็นทางเลือก)
พิมพ์ซอฟต์แวร์คณิตศาสตร์
ใบอนุญาตLGPLv3GPLv2สองตัว[ 4 ]
เว็บไซต์gmplib.org แก้ไขข้อมูลนี้บนวิกิดาต้า
ที่เก็บข้อมูล
  • gmplib.org/repo/

GNU Multiple Precision Arithmetic Library ( GMP ) เป็น ไลบรารี ฟรีสำหรับ การ คำนวณเลขคณิตความแม่นยำสูงโดยทำงานกับจำนวนเต็มที่มีเครื่องหมาย จำนวนตรรกยะและจำนวนทศนิยม [ 4 ]ไม่มีข้อจำกัดในทางปฏิบัติเกี่ยวกับความแม่นยำ ยกเว้นข้อจำกัดที่กำหนดโดยหน่วยความจำ ที่มีอยู่ (ตัวดำเนินการอาจมีขนาดสูงสุด 2 32 −1 บิตบนเครื่อง 32 บิต และ 2 37บิตบนเครื่อง 64 บิต) [ 5 ] [ 6 ] GMP มีฟังก์ชันมากมาย และฟังก์ชันเหล่านี้มีอินเทอร์เฟซที่สม่ำเสมอ อินเทอร์เฟซพื้นฐานมีไว้สำหรับภาษา Cแต่ มี wrapperสำหรับภาษาอื่นๆ รวมถึงAda , C++ , C# , Julia , .NET , OCaml , Perl , PHP , Python , R , RubyและRust

ก่อนปี 2008 Kaffeซึ่งเป็นเครื่องเสมือน Javaใช้ GMP เพื่อรองรับการคำนวณเลขคณิตความแม่นยำสูงในตัวของ Java [ 7 ]หลังจากนั้นไม่นาน การสนับสนุน GMP ก็ถูกเพิ่มเข้าไปในGNU Classpathในฐานะแบ็กเอนด์สำหรับjava.math.BigIntegerและ[java.math.BigDecimal 8 ]

แอปพลิเคชันเป้าหมายหลักของ GMP ได้แก่ แอป พลิเคชันและการวิจัยด้านการเข้ารหัสลับ แอปพลิเคชันด้านความปลอดภัยทางอินเทอร์เน็ต และระบบพีชคณิตคอมพิวเตอร์

GMP มีเป้าหมายที่จะเร็วกว่า ไลบรารี การคำนวณเลขคณิตความแม่นยำสูง (เลขขนาดใหญ่) อื่นๆ สำหรับขนาดตัวดำเนินการทุกขนาด ปัจจัยสำคัญบางประการในการบรรลุเป้าหมายนี้ ได้แก่:

การเผยแพร่ GMP ครั้งแรกเกิดขึ้นในปี 1991 มีการพัฒนาและบำรุงรักษาอย่างต่อเนื่อง[ 9 ]

GMP เป็นส่วนหนึ่งของ โครงการ GNU (แม้ว่าเว็บไซต์ของมันจะไม่ได้อยู่ที่ gnu.org ซึ่งอาจทำให้เกิดความสับสน) และเผยแพร่ภายใต้สัญญาอนุญาต GNU Lesser General Public License (LGPL)

GMP ใช้สำหรับการคำนวณเลขจำนวนเต็มในระบบพีชคณิตคอมพิวเตอร์ หลาย ระบบเช่นMathematica [ 10 ]และMaple [ 11 ]นอกจากนี้ยังใช้ในไลบรารีอัลกอริธึมเรขาคณิตเชิงคำนวณ (CGAL) ด้วย

จำเป็นต้องใช้ GMP ในการสร้างGNU Compiler Collection (GCC) [ 12 ]

อินเทอร์เฟซไลบรารี C

อินเทอร์เฟซไลบรารี C กำหนดสิ่งต่อไปนี้:

  • mpz_t(จำนวนเต็มความแม่นยำสูง)
  • mpq_t(จำนวนเชิงตรรกะความแม่นยำสูง)
  • mpf_t(เลขทศลอยความแม่นยำสูง)
  • gmp_randstate_t(สถานะสุ่ม ใช้สำหรับสร้างตัวเลขสุ่ม)

ฟังก์ชันจะมีคำนำหน้าเป็นชื่อประเภท (ตัวอย่างเช่น การดำเนินการกับจำนวนเต็มความแม่นยำสูงจะมีคำนำหน้าเป็นmpz, เป็นต้น)

นอกจากนี้ ไลบรารีนี้ยังมีเครื่องมืออำนวยความสะดวกเพิ่มเติม (ทั้งหมดขึ้นต้นด้วยgmp) เช่นgmp_scanf, gmp_printf, เป็นต้น

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างโค้ดภาษาซีที่แสดงการใช้ไลบรารี GMP เพื่อคูณและพิมพ์ตัวเลขขนาดใหญ่:

#include <stdio.h> #include <gmp.h>int main ( void ) { mpz_t x , y , result ;mpz_init_set_str ( x , "7612058254738945" , 10 ); mpz_init_set_str ( y , "9263591128439081" , 10 ); mpz_init ( result );mpz_mul ( result , x , y ); gmp_printf ( " %Zd \n " "* \n " " %Zd \n " "-------------------- \n " "%Zd \n " , x , y , result );// ปลดปล่อยหน่วยความจำที่ใช้แล้วmpz_clear ( x ); mpz_clear ( y ); mpz_clear ( result );ส่งคืนค่า0 ; }

โค้ดนี้คำนวณค่าของ.

เมื่อคอมไพล์และรันโปรแกรมนี้จะได้ผลลัพธ์ดังนี้ ( -lgmpใช้แฟล็กนี้หากคอมไพล์บนระบบประเภท Unix)

 7612058254738945 * 9263591128439081 -------------------- 70514995317761165008628990709545 

อินเทอร์เฟซไลบรารี C++

อินเทอร์เฟซไลบรารี C++ กำหนดคลาสต่างๆ ดังนี้:

  • mpz_class(ตรงกับmpz_t)
  • mpq_class(ตรงกับmpq_t)
  • mpf_class(ตรงกับmpf_t)
  • gmp_randclass(มีเครื่องมือสร้างเลขสุ่ม)

ฟังก์ชันอิสระในไลบรารี C ถูกรวมเข้าเป็นเมธอดในคลาส C++ ไลบรารี C++ วางสัญลักษณ์ทั้งหมดไว้ทั่วโลก และไม่ใช้เนมสเปซ ของไลบรารี แนะนำให้หลีกเลี่ยงautoการประกาศ[ 13 ]สำหรับการกลับไปยังประเภท C แต่ละคลาสจะมีget_mp_t()เมธอดที่สอดคล้องกัน (ตัวอย่างเช่นmpz_class::get_mpz_t())

ตัวอย่าง

เพื่อเป็นการเปรียบเทียบ เราสามารถเขียนโปรแกรม C++ ที่เทียบเท่ากันได้ดังนี้ ( -lgmpxx -lgmpมีการใช้แฟล็กหากคอมไพล์บนระบบประเภท Unix)

import < gmpxx.h > ; import std ;int main () { mpz_class x ( "7612058254738945" ); mpz_class y ( "9263591128439081" ); mpz_class result = x * y ;std :: println ( " {} \ n " " * \n " " {} \ n " " -------------------- \n " "{}" , x.get_str ( ), y.get_str ( ), result.get_str () );ส่งคืนค่า0 ; }

การเชื่อมโยงภาษา

ชื่อห้องสมุด ภาษา ใบอนุญาต
ไลบรารีความแม่นยำหลายระดับของ GNUซี , ซี++แอลจีพีแอล
คณิตศาสตร์::จีเอ็มพีเพิร์ลแอลจีพีแอล
Math::GMPz , Math::GMPfและMath::GMPqเพิร์ลลิขสิทธิ์เชิงศิลปะเวอร์ชัน 1.0 + GPLเวอร์ชัน 1.0 หรือใหม่กว่า
โครงการ Python ทั่วไปสำหรับการคำนวณความแม่นยำสูงไพธอนแอลจีพีแอล
แพ็กเกจ R 'gmp'อาร์จีพีแอล
โครงการ RubyGemsทับทิมอะปาเช่ 2.0
ตัวยึด Rust FFI สำหรับ GMP, MPFR และ MPCสนิมแอลจีพีแอล
ไลบรารี GNU Multi-Precision สำหรับ PHPพีพีพีพี
รูทีนความแม่นยำสูงของ GNU สำหรับ SBCL เก็บถาวรเมื่อวันที่ 19 พฤศจิกายน 2020 ที่Wayback Machineลิสปาร์กทั่วไปสาธารณสมบัติ
ช.จีเอ็มพีกรรมสิทธิ์
ตัวห่อ GMP แบบขนานสำหรับ BMDFMBMDFM LISP – Cสาธารณสมบัติ
คอมไพเลอร์ Haskellแห่งกลาสโกว์ (การใช้งานIntegerหลัก ๆ คือการเชื่อมต่อกับ GMP) ฮัสเคลล์บีเอสดี
ลูอาจิต-จีเอ็มพีลูอาจิทเอ็มไอที
gmp-wrapper สำหรับเดลฟีเดลฟีเอ็มไอที
ซาริธโอแคมล์แอลจีพีแอล
ไลบรารีเนทีฟ Math.GMP.สุทธิเอ็มไอที
นิม-จีเอ็มพีนิมเอ็มไอที
เจจีเอ็มพีชวาแอลจีพีแอล

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=GNU_Multiple_Precision_Arithmetic_Library&oldid=1344236344 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ไลบรารีการคำนวณเลขความแม่นยำสูง GNU

GNU Multiple Precision Arithmetic Library ( GMP ) เป็น ไลบรารี ฟรีสำหรับ การ คำนวณเลขคณิตความแม่นยำสูงโดยทำงานกับจำนวนเต็มที่มีเครื่องหมาย จำนวนตรรกยะและจำนวนทศนิยม...

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างโค้ดภาษาซีที่แสดงการใช้ไลบรารี GMP เพื่อคูณและพิมพ์ตัวเลขขนาดใหญ่:

อินเทอร์เฟซไลบรารี C++

อินเทอร์เฟซไลบรารี C++ กำหนดคลาสต่างๆ ดังนี้:

การเชื่อมโยงภาษา

ชื่อห้องสมุด ภาษา ใบอนุญาต ไลบรารีความแม่นยำหลายระดับของ GNU ซี , ซี++ แอลจีพีแอล คณิตศาสตร์::จีเอ็มพี เพิร์ล แอลจีพีแอล Math::GMPz , Math::GMPfและMath::GMPq เพิร์ล ลิขสิทธิ์เชิงศิลปะเวอร์ชัน 1.0 + GPL เวอร์ชัน 1.