มีวิธีมากมายในการจัดเก็บตัวเลขเศษส่วนและแต่ละวิธีมีข้อดีและข้อเสีย
รูปแบบจุดลอยตัวคือรูปแบบที่นิยมมากที่สุด มันทำงานได้โดยการเข้ารหัสสัญญาณ, mantissa และเลขชี้กำลังฐาน 2 ที่ลงนามเป็นจำนวนเต็มและบรรจุลงในกลุ่มบิต ตัวอย่างเช่นคุณสามารถมี mantissa แบบ 32 บิตของ0.5
(เข้ารหัสเป็น0x88888888
) และเลขชี้กำลังแบบ 32 บิตของ+3
( 0x00000003
) ซึ่งจะถอดรหัสเป็น4.0
(0.5 * 2 ^ 3
) จำนวนจุดลอยตัวนั้นรวดเร็วเนื่องจากมีการใช้งานในฮาร์ดแวร์และเครื่องชั่งที่มีความแม่นยำด้วยขนาดที่แน่นอนยิ่งจำนวนที่น้อยลงความแม่นยำสัมบูรณ์ของคุณก็จะยิ่งดีขึ้นเท่านั้น โฟลตนั้นยอดเยี่ยมสำหรับค่าตัวอย่างจากโดเมนต่อเนื่องเช่นความยาวระดับความดันเสียงระดับแสง ฯลฯ และด้วยเหตุนี้จึงใช้ในการประมวลผลเสียงและภาพรวมถึงการวิเคราะห์ทางสถิติและการจำลองทางฟิสิกส์ ข้อเสียที่ใหญ่ที่สุดของพวกเขาคือพวกเขาไม่ถูกต้องกล่าวคือพวกเขามีแนวโน้มที่จะปัดเศษข้อผิดพลาดและพวกเขาไม่สามารถแสดงเศษส่วนทศนิยมทั้งหมดได้อย่างถูกต้อง ภาษาโปรแกรมกระแสหลักทั้งหมดมีจุดลอยตัวของการจัดเรียงบางอย่าง
จุดคงที่ทำงานโดยใช้จำนวนเต็มขนาดใหญ่เพียงพอและสำรองส่วนหนึ่งโดยนัยของบิตสำหรับส่วนที่เป็นเศษส่วน ตัวอย่างเช่นหมายเลขจุดคงที่ 24.8 บิตสำรอง 24 บิตสำหรับส่วนจำนวนเต็ม (รวมถึงเครื่องหมาย) และ 8 บิตสำหรับส่วนที่เป็นเศษส่วน การขยับตัวเลขนั้นทางขวา 8 บิตจะทำให้เราได้ส่วนจำนวนเต็ม หมายเลขจุดคงที่เคยได้รับความนิยมเมื่อหน่วยจุดลอยตัวของฮาร์ดแวร์ผิดปกติหรืออย่างน้อยก็ช้ากว่าจำนวนเต็ม ในขณะที่ตัวเลขจุดคงที่ค่อนข้างง่ายต่อการจัดการในแง่ของความถูกต้อง (ถ้าเพียงเพราะพวกเขามีเหตุผลที่ง่ายกว่า) พวกเขาด้อยกว่าที่จะลอยตัวในเรื่องอื่น ๆ ทุกเรื่อง - พวกเขามีความแม่นยำน้อยกว่า การดำเนินการจำเป็นสำหรับการคำนวณที่ถูกต้องสำหรับการเปลี่ยนแปลงทางอ้อมคณิตศาสตร์จุดคงที่วันนี้มักจะช้ากว่าคณิตศาสตร์จุดลอย
ประเภททศนิยมทำงานเหมือนลอยหรือตัวเลขจุดคงที่ แต่พวกเขาถือว่าระบบทศนิยมนั่นคือเลขชี้กำลัง (โดยปริยายหรือโดยชัดแจ้ง) จะเข้ารหัสพลังงานของ 10 ไม่ใช่พลังงานของ 2 ยกตัวอย่างเช่นตัวเลขทศนิยมสามารถเข้ารหัส mantissa ของ23456
และเลขชี้กำลังของ-2
และสิ่งนี้จะขยายไป234.56
. ทศนิยมเนื่องจากเลขคณิตไม่ได้ถูกต่อสายเข้ากับซีพียูช้ากว่าการลอย แต่มันเหมาะสำหรับทุกสิ่งที่เกี่ยวข้องกับตัวเลขทศนิยมและต้องการตัวเลขเหล่านั้นที่แน่นอนด้วยการปัดเศษในจุดที่กำหนดไว้อย่างดี กระดานบอกคะแนน ฯลฯ ภาษาการเขียนโปรแกรมบางภาษามีประเภททศนิยมอยู่ในตัว (เช่น C #) ส่วนภาษาอื่น ๆ ต้องการไลบรารีเพื่อใช้งาน โปรดทราบว่าในขณะที่ทศนิยมสามารถแสดงทศนิยมเศษส่วนที่ไม่ซ้ำได้อย่างแม่นยำ แต่ความแม่นยำนั้นไม่ได้ดีไปกว่าตัวเลขทศนิยม การเลือกทศนิยมหมายความว่าคุณได้รับตัวเลขที่แน่นอนซึ่งสามารถแสดงได้อย่างชัดเจนในระบบทศนิยม (เช่นเดียวกับการลอยตัวสามารถแสดงถึงเศษส่วนไบนารีได้อย่างแน่นอน)
จำนวนตรรกยะจัดเก็บเศษและเศษโดยปกติจะใช้ประเภทจำนวนเต็มจำนวน bignum (ประเภทตัวเลขที่สามารถเติบโตได้มากตามที่ข้อ จำกัด หน่วยความจำของคอมพิวเตอร์อนุญาต) นี่เป็นชนิดข้อมูลเดียวในเครือที่สามารถจำลองแบบตัวเลขเช่น1/3
หรือ3/17
ดำเนินการกับพวกมันได้อย่างถูกต้อง- ปันส่วนไม่เหมือนชนิดข้อมูลอื่น ๆ จะให้ผลลัพธ์ที่ถูกต้องสำหรับสิ่งต่าง ๆ เช่น3 * 1/3
. คณิตศาสตร์ค่อนข้างตรงไปตรงมาแม้ว่าการหาอัลกอริทึมการแฟ็กเตอริงที่มีประสิทธิภาพนั้นค่อนข้างท้าทาย ภาษาการเขียนโปรแกรมบางภาษามีประเภทแบบมีเหตุผลอยู่ภายใน (เช่น Common LISP) ข้อเสียของการปันส่วนรวมถึงพวกเขาช้า (การดำเนินการจำนวนมากต้องการลดเศษส่วนและแยกองค์ประกอบของพวกเขา) และการดำเนินงานทั่วไปจำนวนมากนั้นยากหรือเป็นไปไม่ได้ที่จะนำมาใช้และการใช้งานส่วนใหญ่จะลดsin()
บนเหตุผล)
BCD (Binary Coded Decimal) ใช้ "nibbles" (กลุ่มละ 4 บิต) เพื่อเข้ารหัสตัวเลขแต่ละตัว เนื่องจากแทะสามารถเก็บค่าที่แตกต่างกัน 16 ค่า แต่ตัวเลขฐานสิบต้องมีเพียง 10 ค่าจึงมีค่า "ผิดกฎหมาย" 6 ค่าต่อแทบ เช่นเดียวกับทศนิยมตัวเลข BCD เป็นทศนิยมที่แน่นอนนั่นคือการคำนวณที่ดำเนินการกับตัวเลขทศนิยมนั้นจะออกมาเช่นเดียวกับที่พวกเขาทำหากคุณใช้ปากกาและกระดาษ กฎทางคณิตศาสตร์ของ BCD ค่อนข้างงุ่มง่าม แต่ข้อเสียคือการแปลงสตริงเป็นสตริงทำได้ง่ายกว่ารูปแบบอื่น ๆ ซึ่งน่าสนใจเป็นพิเศษสำหรับสภาพแวดล้อมที่มีทรัพยากรต่ำเช่นระบบฝังตัว
สตริง , ใช่, สตริงเก่าธรรมดาสามารถใช้แทนตัวเลขเศษส่วนได้ ในทางเทคนิคแล้วสิ่งนี้คล้ายกับ BCD เพียงอย่างเดียวที่มีจุดทศนิยมชัดเจนและคุณใช้หนึ่งไบต์เต็มต่อหนึ่งหลักทศนิยม ดังนั้นรูปแบบจึงสิ้นเปลือง (ใช้ค่าที่เป็นไปได้เพียง 11 จาก 256 เท่านั้น) แต่ง่ายต่อการแยกวิเคราะห์และสร้างกว่า BCD นอกจากนี้เนื่องจากค่าที่ใช้ทั้งหมดนั้นเป็น "ไม่น่าสงสัย", ไม่เป็นอันตรายและไม่มีการเข้ารหัสสตริงที่เป็นกลางและเป็นแพลตฟอร์มสามารถเดินทางผ่านเครือข่ายได้โดยไม่มีปัญหา มันเป็นเรื่องแปลกที่จะหาเลขคณิตที่กระทำกับสตริงโดยตรง แต่เป็นไปได้และเมื่อคุณทำมันจะเป็นทศนิยมที่แน่นอนเท่ากับรูปแบบทศนิยมอื่น ๆ (ทศนิยมและ BCD)