JavaRush /จาวาบล็อก /Random-TH /จำนวนจริงในหน่วยความจำคอมพิวเตอร์ คำอธิบาย.
Marianna
ระดับ
Москва

จำนวนจริงในหน่วยความจำคอมพิวเตอร์ คำอธิบาย.

เผยแพร่ในกลุ่ม
สวัสดีตอนบ่าย ระหว่างศึกษาการบรรยายเรื่อง “ความแตกต่างของการทำงานกับจำนวนจริง” ของภารกิจแรก (ตอนที่ 2 โครงสร้างของจำนวนจุดลอยตัว) และการบรรยายเพิ่มเติมในหัวข้อนี้ หลายๆ คนคงเคยเจอคำถามมากมายในหัวข้อนี้ ในตอนแรก ฉันพยายามให้คำตอบที่จำเป็นกับตัวเอง และตอนนี้ฉันเสนอคำตอบเหล่านี้ให้กับคุณเพื่อช่วยให้คุณเข้าใจอย่างถ่องแท้ตามลำดับตรรกะที่สอดคล้องกัน 1. ระบบเลขทศนิยมและเลขฐานสอง 1.1 ระบบเลขทศนิยมเป็นระบบหนึ่งที่ใช้บ่อยที่สุด เป็นระบบที่เราใช้สำหรับการคำนวณทางคณิตศาสตร์ที่ไม่ใช่คอมพิวเตอร์ที่โรงเรียน ที่มหาวิทยาลัย และในชีวิต ใช้ตัวเลข1, 2, 3, 4, 5, 6, 7, 8, 9, 0 (อารบิก) - รวมทั้งหมด 10 หลัก นอกจากนี้ยังมีสัญกรณ์โรมันสำหรับตัวเลขซึ่งปัจจุบันไม่ได้ใช้จริงแล้ว ในระบบทศนิยม การนับจะดำเนินการในหน่วย สิบ ร้อย พัน หมื่น หลักแสน หลักล้าน ฯลฯ - กล่าวอีกนัยหนึ่ง นี่คือตัวเลขทั้งหมดของตัวเลข หลักของตัวเลขคือตำแหน่ง (ตำแหน่ง) ของหลักในบันทึกตัวเลข หลักต่ำสุดของจำนวนธรรมชาติ (และนัยสำคัญ น้อยที่สุด ) คือหลักหน่วย (ขวาสุด) ทำไมเขาถึงไม่มีนัยสำคัญที่สุด? เพราะการปล่อยหลักหน่วยของตัวเลขจะทำให้ตัวเลขเปลี่ยนแปลงน้อยที่สุด (เช่น ตัวเลข 345 และ 340) ต่อไปหลักที่สองคือหลักสิบ เป็นต้น ทั้งหมดนี้หมายความว่าอย่างไร? ลองหาจำนวนเต็มใดๆ ในระบบทศนิยมแล้วแยกย่อยเป็นตัวเลข . 3297 = 3*1000 + 2*100 + 9*10 + 7 ดังนั้นเราจึงพบว่าหมายเลข3297ประกอบด้วย3 หน่วยของหลักที่สี่ (นั่นคือ 3 พัน) 2 หน่วยของหลักที่สาม (2 ร้อย) 9 หน่วยของหลักที่สอง (9 สิบ) และ7 หน่วยของหลักแรก กล่าวอีกนัยหนึ่ง จำนวนนี้คือ สามพันสองร้อย เก้าสิบเจ็ดและดังนั้นจึงเป็นตำแหน่ง แล้วตัวเลขของเศษส่วน (จริง) ล่ะ ? ตัวเลขของเศษส่วน (ส่วนที่เป็นเศษส่วน) เรียกว่า: สิบ, ร้อย, พัน, หมื่น, ฯลฯ ยิ่งตัวเลขอยู่ห่างจากจุดทศนิยม (จากส่วนทั้งหมดของตัวเลข) ยิ่ง มี นัยสำคัญน้อยลง (หากทิ้งไปค่าของตัวเลขจะเปลี่ยนไปเล็กน้อย) ตัวอย่างเช่น ลองนำจำนวนเศษส่วนใดๆ ที่แสดงเป็นทศนิยม: 25.076 = 2*10 + 5 +0*0.1 + 7*0.01 +6*0.001 ดังนั้น เราพบว่าจำนวนเศษส่วน25.076มี 2 สิบ 5 หน่วย0 ในสิบ , ที่ 7 ในร้อยและ 6 ในพัน. ระบบทศนิยมใช้ตัวเลข 10 หลักและทวีคูณของ 10 ตำแหน่ง จึงเป็นที่มาของชื่อ"ทศนิยม" 1.2 ระบบเลขฐานสองคือระบบตัวเลขที่ใช้ในคอมพิวเตอร์สมัยใหม่และอุปกรณ์อิเล็กทรอนิกส์อื่นๆ ที่ใช้ในการประมวลผลเกือบทั้งหมด ในการบันทึกตัวเลขจะใช้เพียงสองหลักคือ0 และ 1 เพื่อไม่ให้เกิดความสับสนว่าตัวเลขที่เขียนในระบบตัวเลขนั้นจะมีตัวบ่งชี้ที่ด้านล่างขวา (เป็นฐานของระบบตัวเลข ) สำหรับ ตัวอย่าง: 1000₁₀ 1000₂ ตัวเลขแรกคือหลักพัน ที่คุ้นเคย ในระบบทศนิยม และตัวเลขล่างคือตัวเลขในระบบไบนารี่ และมีค่าเท่ากันในระบบทศนิยม... 8 ! เช่นเดียวกับระบบทศนิยม ระบบไบนารียังแบ่งตัวเลขออกเป็นตัวเลขด้วย แต่ละหลักในเลขฐานสองเรียกว่าบิต (หรือdigit ) (ถ้าใครสนใจ สี่บิตคือแทะ (หรือเตตราด) 8 บิตคือไบต์ 16 บิตคือคำ 32 บิตคือคำคู่ ) บิต (ตัวเลข) ก็มีการกำหนดหมายเลขจากขวาไปซ้ายเช่นกัน โดยเริ่มจากศูนย์ (ไม่เหมือนกับระบบทศนิยม) บิตทางขวาที่มีนัย สำคัญน้อยที่สุดมีนัยสำคัญน้อยที่สุดมีหมายเลขลำดับเป็น0 ถัดมาเป็นบิตแรก บิต ที่สองฯลฯ ยิ่งเก่าบิตก็ยิ่งมีนัยสำคัญมากขึ้น (โดยการเปรียบเทียบกับระบบทศนิยมที่เราเข้าใจ - หากคุณลบอันออกจากหมายเลข 1455 คุณจะเหลือเพียงหมายเลข 1450 - เกือบเท่ากับอันแรกแต่ถ้าเอาหลักร้อยออกไปก็จะเหลือเลข 1,050 ซึ่งอยู่ไกลจากค่าเริ่มต้นอยู่แล้วเพราะหลักร้อยนั้นสำคัญกว่า (ลำดับสูง) มากกว่าหน่วยที่วาง ). ตัวอย่าง. ยังไม่ได้อ่าน :))) ตัวเลขจริงในหน่วยความจำคอมพิวเตอร์  อยู่ระหว่างการพัฒนา!!!  - 2 ที่ด้านล่าง บิตของเลขฐานสองที่เป็นเศษส่วนจะมีหมายเลขเป็นสีแดง โดยรวมแล้วเรามี 18 บิต (หลัก) ของตัวเลขนี้ เมื่อมองไปข้างหน้า ฉันอยากจะทราบว่าตัวเลขเศษส่วนจะถูกเก็บไว้ในหน่วยความจำคอมพิวเตอร์ในลักษณะที่แตกต่างไปจากเดิมอย่างสิ้นเชิง ซึ่งจะกล่าวถึงในภายหลัง ในระหว่างนี้ เรามาดูวิธีแปลงตัวเลขจากระบบตัวเลขหนึ่งไปเป็นอีกระบบกัน 2. การแปลงจำนวนเต็มและเศษส่วนจากระบบทศนิยมเป็นระบบไบนารี่และในทางกลับกัน 2.1 การแปลงจากทศนิยมเป็นไบนารี 2.1.1 จำนวนเต็ม ในการแปลงเลขฐานสิบจำนวนเต็มเป็นระบบเลขฐานสอง คุณต้องหารตัวเลขนี้ด้วย 2 แล้วจดส่วนที่เหลือของการหารลงไป (จะเท่ากับ 0 หรือ 1 เสมอ ขึ้นอยู่กับว่าตัวเลขนั้นเป็นเลขคู่หรือคี่) แล้วหารผลลัพธ์ของการหารอีกครั้งด้วย 2 เขียนส่วนที่เหลือของการหาร (0 หรือ 1) อีกครั้ง แล้วหารผลลัพธ์จากการหารที่สองด้วย 2 อีกครั้ง ทำแบบนี้ต่อไปจนกว่าผลลัพธ์ของการหารจะเท่ากับ 1 ต่อไป เราจะเขียนเลขศูนย์และผลลัพธ์ทั้งหมดในลำดับย้อนกลับโดยเริ่มจากผลการหารล่าสุด ซึ่งจะเท่ากับ 1 เสมอ หมายเหตุสำคัญ ผลลัพธ์สุดท้ายของการหารเลขจำนวนเต็มใดๆ ด้วย 2 ตามลำดับจะจบลงด้วยการเป็นหนึ่ง (1) เสมอ! หากผลลัพธ์มากกว่า 1 เราจะหารผลลัพธ์นี้ต่อไปด้วย 2 จนกว่าเราจะได้ผลลัพธ์หนึ่ง และผลลัพธ์ของการหารด้วย 2 อาจเป็นศูนย์ (0) ได้ในกรณีเดียวเท่านั้น - นี่คือการหารศูนย์ด้วย 2 ตัวอย่าง ลองแปลงตัวเลข145จากระบบทศนิยมเป็นไบนารี่กัน 145/2 = 72 (ส่วนที่เหลือ1 ) 72/2 = 36 (ส่วนที่เหลือ0 ) 36/2 = 18 (ส่วนที่เหลือ0 ) 18/2 = 9 (ส่วนที่เหลือ0 ) 9/2 = 4 (ส่วนที่เหลือ1 ) 4/2 = 2 (ส่วนที่เหลือ0 ) 2/2 = 1 (ส่วนที่เหลือ0 ) ตอนนี้เรา "รวบรวม" เลขฐานสองของเราในลำดับย้อนกลับ เราได้หมายเลข10010001เสร็จแล้ว! ความแตกต่างที่น่าสนใจ 1.มาแปลงเลข 1จากระบบทศนิยมเป็นไบนารี่กัน ในระบบไบนารี่ตัวเลขนี้จะเขียนเป็น 1ท้ายที่สุดผลลัพธ์สุดท้ายของการหารด้วย 2 ซึ่งควรจะเท่ากับ 1 ก็เท่ากับเลข 1 อยู่แล้ว 1₁₀ = 1₂ ความแตกต่างที่น่าสนใจ 2มาแปลงกัน เลข0จากระบบทศนิยมถึงไบนารี่ ในระบบไบนารี่จำนวนนี้จะเขียนเป็น 0 0₁₀ = 0₂ 2.1.2 จำนวนเศษส่วน วิธีแปลงตัวเลขเศษส่วนเป็นไบนารี่? ในการแปลงเศษส่วนทศนิยมเป็นระบบเลขฐานสองคุณต้อง: ก) แปลง เศษส่วนทั้งหมดเป็นระบบไบนารี่ตามอัลกอริทึมที่ศึกษาในย่อหน้าที่ 2.1.1 ข) คูณเศษส่วนของเศษส่วน ด้วย 2 เขียนหลักผลลัพธ์ของผลลัพธ์ก่อนจุดทศนิยม (เท่ากับ 0 หรือ 1 เสมอซึ่งเป็นตรรกะ) แล้วคูณเฉพาะส่วนที่เป็นเศษส่วนของผลลัพธ์ที่ได้ด้วย 2 อีกครั้ง เขียนตัวเลขผลลัพธ์ของผลลัพธ์ก่อนจุดทศนิยม (0 หรือ 1) และต่อไปเรื่อยๆ จนเป็นเศษส่วน ส่วนหนึ่งของผลการคูณจะเท่ากับ 0 หรือจนครบจำนวนตำแหน่งทศนิยมที่ต้องการ ( ความแม่นยำ ที่ต้องการ ) (เท่ากับจำนวนการคูณด้วย 2) จากนั้นคุณจะต้องเขียนลำดับผลลัพธ์ของศูนย์ที่เขียนและลำดับตามลำดับหลังจากจุดที่แยกส่วนจำนวนเต็มและเศษส่วนของจำนวนจริง (เศษส่วน) ตัวอย่างที่ 1 ลองแปลงตัวเลข2.25 (2 จุด 25 ในร้อย) จากระบบทศนิยมเป็นระบบไบนารี่ ในระบบไบนารี่ เศษส่วนจะเท่ากับ10.01 . เราได้รับสิ่งนี้มาได้อย่างไร? ตัวเลขประกอบด้วยส่วนจำนวนเต็ม (จนถึงจุด) - นี่คือ 2 และส่วนที่เป็นเศษส่วน - คือ 0.25 1) การแปลส่วนทั้งหมด: 2/2 = 1 (ส่วนที่เหลือ0 ) ส่วนทั้งหมดจะเป็น10 . 2) การแปลส่วนที่เป็นเศษส่วน 0.25 * 2 = 0 .5 (0) 0.5 * 2 = 1 .0 (1) เศษส่วนเท่ากับ 0 อันเป็นผลมาจากการคูณ 2 ต่อเนื่องกัน เราหยุดการคูณ ตอนนี้เรา "รวบรวม" ส่วนที่เป็นเศษส่วนตามลำดับ - เราได้รับ0.01ในระบบไบนารี่ 3)เพิ่มส่วนจำนวนเต็มและเศษส่วน - เราพบว่าเศษส่วนทศนิยม2.25จะเท่ากับเศษส่วนไบนารี10.01 . ตัวอย่างที่ 2 ลองแปลงตัวเลข0.116จากระบบทศนิยมเป็นระบบไบนารี่ 0.116 * 2 = 0.232 (0) 0.232 * 2 = 0.464 (0 ) 0.464 * 2 = 0.928 (0) 0.928 * 2 = 1.856 (1) // ละทิ้งส่วนจำนวนเต็มของผลลัพธ์นี้ 0.856 * 2 = 1 .712 (1 ) // ละทิ้งทั้งส่วนของผลลัพธ์นี้ 0.712 * 2 = 1 .424 (1) // ละทิ้งทั้งส่วนของผลลัพธ์นี้ 0.424 * 2 = 0 .848 (0) ดังที่เราเห็น การคูณดำเนินต่อไปเรื่อยๆส่วนที่เป็นเศษส่วนของผลลัพธ์จะไม่เท่ากับ 0 จากนั้นเราตัดสินใจว่าเราจะแปลงเศษส่วนทศนิยมของเราให้เป็นไบนารี่ด้วยความแม่นยำ 7 ตำแหน่ง (บิต)หลังจุด (ในส่วนที่เป็นเศษส่วน) ขอให้เราจำสิ่งที่เราศึกษาเกี่ยวกับบิตที่ไม่มีนัยสำคัญ - ยิ่งบิต (บิต) ออกจากส่วนทั้งหมดมากเท่าไร เราก็จะละเลยมันได้ง่ายขึ้น (คำอธิบายในส่วนที่ 1 ของการบรรยายใครลืม) เราได้เศษส่วนไบนารี่0.0001110โดยมีความแม่นยำ 7 บิตหลังจุด 2.2 การแปลงจากไบนารีเป็นทศนิยม 2.2.1 จำนวนเต็ม ที่จะแปลทั้งหมดตัวเลขจากระบบเลขฐานสองเป็นทศนิยมจำเป็นต้องแบ่งตัวเลขนี้เป็นตัวเลข (บิต) และคูณแต่ละหลัก (บิต) ด้วยตัวเลข 2 จนถึงระดับบวก ที่แน่นอน (ระดับนี้เริ่มนับจากขวาไปซ้ายจากนัยสำคัญน้อยที่สุด (บิตขวา) และเริ่มจาก 0 ) กล่าวอีกนัยหนึ่ง กำลังของสอง เท่ากับจำนวนของบิตที่กำหนด (แต่กฎที่ไม่ได้เขียนไว้นี้สามารถใช้ได้เฉพาะในกรณีของการแปลงจำนวนเต็มเนื่องจากสำหรับตัวเลขเศษส่วน การกำหนดหมายเลขของบิตเริ่มต้นในส่วนเศษส่วนซึ่งถูกแปล ในระบบทศนิยมต่างกัน ) ต่อไปคุณจะต้องเพิ่มผลิตภัณฑ์ที่เป็นผลลัพธ์ ตัวอย่าง. ลองแปลงเลขฐานสอง110011เป็นระบบเลขฐานสิบ 110011₂ = 1*2⁵ + 1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º = 32 +16 +0 + 0 + 2 + 1 = 51₁₀ เป็นผลให้เราได้ตัวเลข 51 ในระบบ ไบนารี่ สำหรับข้อมูล ด้านล่างนี้คือตารางเลขยกกำลังแรกของเลข 2 ยังไม่ได้อ่าน :))) ตัวเลขจริงในหน่วยความจำคอมพิวเตอร์  อยู่ระหว่างการพัฒนา!!!  - 5 ! โปรดทราบว่าค่าศูนย์ยกกำลังของตัวเลขจะเป็น 1 เสมอ 2.2.2 จำนวนเศษส่วน ในการแปลงจำนวนเศษส่วนไบนารี (จริง) เป็นทศนิยมคุณต้อง: a)แปลงส่วนจำนวนเต็มเป็นทศนิยมตามอัลกอริทึมจากย่อหน้าที่ 2.2.1 ; b)แปลส่วนที่เป็นเศษส่วนดังนี้ จำเป็นต้องนำเสนอส่วนที่เป็นเศษส่วนเป็นผลรวมของผลิตภัณฑ์ของตัวเลขโดยสองยกกำลังเป็นลบ(กำลังสำหรับหลักแรกหลังจุด (หลังจากส่วนทั้งหมดของเศษส่วน) จะเท่ากับ -1, สำหรับหลักที่สองหลังจุดจะเท่ากับ -2 เป็นต้น) ผลลัพธ์จำนวนนี้จะเป็นส่วนเศษส่วนของตัวเลขในระบบทศนิยม ตัวอย่าง. ลองแปลงตัวเลข10111.01เป็นระบบไบนารี่กัน 10111.01₂ = (1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º) (0*2ˉ¹ + 1*2ˉ²) = (16 + 0 + 4 + 2 + 1) (0 + 0.25) = 23.25₁₀ ด้วยเหตุนี้ เราจึงได้ตัวเลข23.25ในระบบเลขฐานสิบ ตารางกำลังลบแรกของ 2 แสดงไว้ด้านล่าง ยังไม่ได้อ่าน :))) ตัวเลขจริงในหน่วยความจำคอมพิวเตอร์  อยู่ระหว่างการพัฒนา!!!  - 7 2.2.3 สูตรทั่วไปในการแปลงตัวเลขจากไบนารีเป็นทศนิยม มาดูสูตรทั่วไปในการแปลงตัวเลขจากไบนารีเป็นทศนิยม (ทั้งจำนวนเต็มและเศษส่วน) ยังไม่ได้อ่าน :))) ตัวเลขจริงในหน่วยความจำคอมพิวเตอร์  อยู่ระหว่างการพัฒนา!!!  - 4 โดยที่Aคือตัวเลขในระบบเลขฐานสอง ฐานของระบบตัวเลขคือ 2 (หมายถึงแต่ละบิตจะถูกคูณด้วย 2 ยกกำลัง) n— จำนวนเลขจำนวนเต็ม (บิต) ; mคือ จำนวนหลักเศษส่วน (บิต) ของตัวเลข บิตแรกของส่วนจำนวนเต็มจากจุดหารจะถูกเน้นด้วยสีแดง มันจะถูกคูณด้วย 2 ยกกำลังศูนย์เสมอ บิตถัดไปที่อยู่ข้างหน้า (ทางซ้าย) จะถูกคูณด้วย 2 ยกกำลังแรก เป็นต้น บิตแรกของส่วนที่เป็นเศษส่วนจากจุดหารจะถูกเน้นด้วยสีเขียว มันจะถูกคูณด้วย 2 ยกกำลัง 1 เสมอ บิตถัดไปทางขวาจะคูณด้วย 2 ยกกำลังลบวินาที เป็นต้น 3. สัญกรณ์วิทยาศาสตร์: สัญกรณ์ที่ทำให้เป็นมาตรฐานในทั้งสองระบบ แมนทิสซา เลขชี้กำลัง ระดับของเลขชี้กำลัง 3.1 รูปแบบการเขียนเลขชี้กำลัง ก่อนหน้านี้เราได้ศึกษารูปแบบโดยละเอียดสำหรับการบันทึก หมายเลข ตำแหน่งเป็นตัวเลข เอาเลข0.0000000000000000000016 มาใช้ กัน มีรายการยาวมากในรูปแบบมาตรฐาน และใน รูปแบบ เลขชี้กำลังจะมีลักษณะดังนี้: 1.6 * 10ˉ²¹ แล้ว รูปแบบเลขชี้กำลังของตัวเลข คืออะไร และจะแสดงตัวเลขในรูปแบบนี้ได้อย่างไร สั ญกรณ์ทางวิทยาศาสตร์สำหรับตัวเลขคือการแทนจำนวนจริงในรูปของแมนทิสซาและเลขชี้กำลัง สะดวกสำหรับการแสดงตัวเลขมากหรือน้อยมากรวมทั้งรวมงานเขียนเข้าด้วยกัน N = M * pⁿ โดยที่Nคือตัวเลขที่จะเขียน Mคือแมนทิสซาของตัวเลข p คือ ฐาน (เท่ากับฐานของระบบตัวเลขของตัวเลขที่กำหนด) n (จำนวนเต็ม) คือลำดับ (ดีกรี อาจเป็นค่าบวกและลบได้) p กำลังของ nคือตัวเลขลักษณะเฉพาะ(เลขยกกำลัง เช่น ฐานยกกำลัง (ลำดับ)) ความแตกต่างที่สำคัญ หากส่วนจำนวนเต็มของเลขฐานสิบแตกต่างจาก 0ดังนั้นลำดับ (ดีกรี) ของเลขชี้กำลังจะเป็นค่าบวกหากส่วนจำนวนเต็มเท่ากับ 0ระดับ ของเลขชี้กำลังจะเป็นลบ 3.2 รูปแบบการเขียนตัวเลขปกติและมาตรฐาน รูปแบบปกติของตัวเลขคือรูปแบบที่แมนทิสซา (ไม่คำนึงถึงเครื่องหมาย) อยู่ที่ครึ่งช่วง [0,1] นั่นคือ 0 <= M < 1 รูปแบบการเขียนนี้มี ข้อเสียเปรียบ: ตัวเลขบางตัวเขียนไม่ชัดเจน (เช่น 0.0001 สามารถเขียนเป็น 0.000001*10², 0.00001⋅10¹, 0.0001⋅10º, 0.001⋅10ˉ¹ เป็นต้น) ดังนั้นการบันทึกรูปแบบอื่นจึงแพร่หลาย (โดยเฉพาะในสาขาวิทยาการคอมพิวเตอร์) - ทำให้เป็นมาตรฐานโดยที่แมนทิสซาของเลขฐานสิบรับค่าตั้งแต่ 1 (รวม) ถึง 10 (ไม่รวม)นั่นคือ 1 <= M < 10 (ในทำนองเดียวกันแมนทิสซาของเลขฐานสองรับค่าตั้งแต่ 1 ถึง 2 ). กล่าวอีกนัยหนึ่งแมนทิสซาในระบบทศนิยมต้องเป็นเลขเศษส่วนตั้งแต่ 1.0 (รวม) ถึง 10 (ไม่รวม)กล่าวคือ ส่วนจำนวนเต็มของแมนทิสซาจะต้องมีตัวเลขหลักเดียว และส่วนที่เป็นเศษส่วนนั้นไม่ได้จำกัดทางคณิตศาสตร์ ข้อดีของรูปแบบที่ทำให้เป็นมาตรฐานคือ ดังนั้น จำนวนใดๆ (ยกเว้น 0) จึงเขียนในลักษณะเฉพาะ ข้อเสียคือเป็นไปไม่ได้ที่จะแทน 0 ในรูปแบบนี้ ดังนั้นการแทนตัวเลขในวิทยาการคอมพิวเตอร์จึงมีเครื่องหมายพิเศษ (บิต) สำหรับเลข 0 3.3 ตัวอย่างการเขียนเลขทศนิยมในรูปแบบเอ็กซ์โปเนนเชียลนอร์มอลไลซ์ ลองดูตัวอย่าง ตัวอย่างที่ 1 ลองเขียนเลขทศนิยม1015000 (หนึ่งล้านหนึ่งหมื่นห้าพัน) ในรูปแบบเอ็กซ์โพเนนเชียลนอร์มอลไลซ์ ระบบตัวเลขสำหรับตัวเลขนี้เป็นทศนิยม ดังนั้นฐานจะเป็น10 เรามาเลือกแมนทิสซากันดีกว่า เมื่อต้องการทำเช่นนี้ ให้จินตนาการว่าตัวเลขเป็นเศษส่วน ซึ่งส่วนที่เป็นเศษส่วนจะเท่ากับศูนย์ (เนื่องจากตัวเลขเป็นจำนวนเต็ม): 1000000.0 หากส่วนจำนวนเต็มของตัวเลขมากกว่า0ให้ย้ายจุดไปทางซ้ายของตำแหน่งเริ่มต้น (ภายในส่วนจำนวนเต็ม) จนกระทั่งเหลือเพียงหลักเดียว ในส่วนของ จำนวนเต็ม หลังจากนั้นเราก็ใส่ช่วงเวลา เราทิ้งศูนย์ที่ไม่มีนัยสำคัญ (ที่ท้ายตัวเลข) เราได้แมนทิสซาของจำนวนเท่ากับ1.015 . เรามากำหนดระดับ (ลำดับ)ของฐานของตัวเลขกันดีกว่า จุดแยกจำนวนเต็มและเศษส่วนย้ายไปทางซ้ายกี่ตำแหน่ง? สำหรับหกตำแหน่ง ซึ่งหมายความ ว่าคำสั่งซื้อจะเป็น6 ในกรณีนี้ ลำดับนั้นเป็นค่าบวก (เราย้ายจุดในส่วนจำนวนเต็มของตัวเลขที่ไม่เท่ากับ 0) รายการสุดท้ายในรูปแบบมาตรฐาน: 1.015 * 10⁶ เราสามารถเขียนตัวเลขนี้ได้ในรูปแบบนี้: 1.015E6 (โดยที่ E6 เป็นเลขชี้กำลังของเลขฐานสิบ ซึ่งก็คือ 10 ยกกำลัง 6) มาทดสอบตัวเราเองกัน สัญกรณ์เอ็กซ์โปเนนเชียลสำหรับตัวเลขนั้นไม่มีอะไรมากไปกว่าผลคูณของตัวเลข (แมนทิสซา) และอีกจำนวนหนึ่ง (เลขชี้กำลัง) จะเกิดอะไรขึ้นถ้าคุณคูณ 1.015 ด้วย 10⁶? 1.015* 10⁶ = 1.015*1000000 = 1015000 ถูกตัอง. วิธีการนี้(ทำให้เป็นมาตรฐาน)ช่วยสร้างเรกคอร์ดที่ชัดเจนตัวเลขในรูปแบบเลขชี้กำลังดังที่ระบุไว้ข้างต้น ตัวอย่างที่ 2 ลองเขียนจำนวนจริงทศนิยม0.0098ในรูปแบบปกติ เน้นฐานของตัวเลข - เท่ากับ10 (ระบบเลขฐานสิบ) เลือกแมนทิสซาของตัวเลข - มันเท่ากับ9.8 (ส่วนจำนวนเต็มของตัวเลขเท่ากับศูนย์ซึ่งหมายความว่าเราย้ายจุดไปทางขวาไปยังหลักสำคัญตัวแรก (ซึ่งอยู่ในช่วงตั้งแต่ 1 ถึง 9 รวม) . เรากำหนดลำดับของตัวเลข-เราย้ายจุดไปสามตำแหน่งซึ่งหมายความว่าลำดับคือ3บวกมันเป็นลบหรือลบ เนื่องจากเราย้ายจุดไปทางขวา (ในส่วนเศษส่วนของตัวเลข) ลำดับ ( กำลัง ) จะเป็น ลบ บันทึกสุดท้ายของตัวเลขในรูปแบบมาตรฐานคือ9.8 * 10ˉ³หรือ9.8E-3ลองตรวจสอบตัวเองอีกครั้ง คูณ 9.8 ด้วย 10ˉ³ 9.8 * 10ˉ³ = 9.8 * 0.001 = 0.0098ถูกต้อง ตัวอย่างที่ 3 ลองเขียนจำนวนจริงทศนิยม3.56ในรูปแบบปกติ เลือกฐานของตัวเลข - เท่ากับ10 (ระบบเลขฐานสิบ) เลือกแมนทิสซาของตัวเลข - เท่ากับ... 3.56 (จำนวนเต็ม ส่วนหนึ่งของตัวเลขคือตัวเลขหลักเดียวไม่เท่ากับ 0 ซึ่งหมายความว่าไม่จำเป็นต้องเลื่อนจุดไหนเลยตัวเลขนั้นเองจะเป็นแมนทิสซา) ลองเน้นลำดับของฐาน: แมนทิสซาควรเป็นตัวเลขใด เท่ากับจำนวนนั้นเองคูณเลยไม่เปลี่ยนเหรอ? ต่อหน่วย. ซึ่งหมายความว่าคำสั่งซื้อจะเป็นศูนย์ บันทึกสุดท้ายของตัวเลขในรูปแบบมาตรฐานคือ3.56 * 10ºหรือ3.56E0 4. การจัดเก็บตัวเลขจริงในหน่วยความจำคอมพิวเตอร์: ลอยตัวและสองเท่า 4.1 แบบลอยและแบบคู่ มาดูส่วนสำคัญของการบรรยายของเรากันดีกว่า ดังที่เราทราบแล้วว่าจำนวน จริงใน Java มีสองประเภท: floatและdouble ประเภทโฟลต ใช้ พื้นที่ 32 บิตในหน่วยความจำคอมพิวเตอร์และสามารถรับค่าได้ในช่วง[3.4E-38; 3.4E+38) (หรืออีกนัยหนึ่งคือ ในช่วงตั้งแต่ 3.4*10ˉ³⁸ (รวม) ถึง 3.4 * 10³⁸ (ไม่รวม)) ความแตกต่างที่สำคัญ 1.ตัวเลขทศนิยมอาจเป็นค่าบวกหรือค่าลบก็ได้ ช่วงนี้ด้านบนนี้ถูกนำเสนอเพื่อระบุโมดูลของตัวเลขที่รวมอยู่ในช่วงทศนิยม ความแตกต่างที่สำคัญ 2 10³⁸ มีค่า ประมาณเท่ากับ2¹²⁷ตามลำดับ 10 ˉ³⁸ มีค่าเท่ากับ2ˉ¹²⁷ โดยประมาณ ดังนั้นช่วงเวลาของค่าสัมบูรณ์ของตัวเลขทศนิยมสามารถเขียนเป็น [3.4 * 2ˉ¹²⁷; 3.4 * 2¹²⁷) ประเภทคู่ ใช้หน่วยความจำคอมพิวเตอร์เป็นสองเท่า -64 บิตและสามารถรับค่าทศนิยมได้ในช่วง[-1.7E+308; 1.7E+308)ตามลำดับ 4.2 รูปแบบเลขฐานสองแบบเอ็กซ์โปเนนเชียล เรารู้ว่าตัวเลขถูกจัดเก็บในรูปแบบไบนารี่ในหน่วยความจำคอมพิวเตอร์ ลองใช้หมายเลข1560.256 (แบบลอยตัว) แล้วแปลงเป็นระบบไบนารี่ในรูปแบบตำแหน่ง : 11000011000.01000001100 คุณอาจคิดว่านี่คือวิธีที่จะเก็บไว้ในหน่วยความจำของคอมพิวเตอร์ แต่นั่นไม่เป็นความจริง! ในหน่วยความจำคอมพิวเตอร์ ประเภทfloatและdouble ( ประเภทจุดลอยตัวจริง ) จะถูกจัดเก็บในรูปแบบเอ็กซ์โปเนนเชียลนอร์มัลไลซ์แต่ฐานของกำลังคือ 2แทนที่จะเป็น 10 นี่เป็นเพราะความจริงที่ว่าตามที่ระบุไว้ข้างต้น ข้อมูลทั้งหมดใน คอมพิวเตอร์จะแสดงในรูปแบบไบนารี่ (บิต) หน่วยความจำคอมพิวเตอร์จำนวนหนึ่งได้รับการจัดสรรให้กับตัวเลข ลองแทนจำนวนบวก15.2ในรูปแบบเอ็กซ์โปเนนเชียลที่ทำให้เป็นมาตรฐาน: 1.52* 10¹ ต่อไป เรามาแทนเลขฐานสอง "คู่" 1111.00110011001ในรูปแบบเลขชี้กำลังที่ทำให้เป็นมาตรฐาน โดยใช้อัลกอริทึมเดียวกัน: 1) ฐานจะเท่ากับ 2 2) แมนทิสซาจะเท่ากับ 1.11100110011001 3) ระดับจะเป็นบวกและเท่ากับ 3 (จุดเลื่อนไปทางซ้าย 3 บิต) ในระบบทศนิยม ลองแปลงเป็นระบบไบนารี่: 11 . ดังนั้นในรูปแบบมาตรฐานเลขชี้กำลังไบนารี่ มันจะเป็น 1.11100110011001 * 2¹¹ 4.3 การจัดเก็บรูปแบบเลขฐานสองที่ทำให้เป็นมาตรฐานเอ็กซ์โปเนนเชียลของ เลข ทศนิยมในหน่วยความจำคอมพิวเตอร์ ดังนั้นเราจึงพบว่าจำนวนจริงจะถูกเก็บไว้ในหน่วยความจำคอมพิวเตอร์ในรูปแบบไบนารี่ที่ทำให้เป็นมาตรฐานแบบเอกซ์โปเนนเชียล มันจะดูเป็นอย่างไรในความทรงจำ? มาดู แบบลอย กัน บ้าง คอมพิวเตอร์จัดสรร 32 บิตสำหรับแต่ละหมายเลขลอย มีการ กระจายดังนี้ รูปนี้แสดงหน่วยความจำที่จัดสรรสำหรับหมายเลขทศนิยมแบบ 32 บิตในคอมพิวเตอร์ในเชิงแผนผัง ยังไม่ได้อ่าน :))) ตัวเลขจริงในหน่วยความจำคอมพิวเตอร์  อยู่ระหว่างการพัฒนา!!!  - 5 การกำหนดหมายเลขบิตจะแสดง เป็นสีแดง สีเขียวหมายถึงชิ้นส่วนของหน่วยความจำที่จัดสรร (1 บิต) สำหรับจัดเก็บเครื่องหมายของตัวเลข สีเหลืองหมายถึงชิ้นส่วนของหน่วยความจำที่จัดสรรไว้สำหรับจัดเก็บกำลังเลื่อน (ลำดับ) ของรูปแบบเลขชี้กำลังของตัวเลข (8 บิต) สีฟ้าหมายถึงชิ้นส่วนของหน่วยความจำที่จัดสรรสำหรับจัดเก็บแมนทิสซาที่ทำให้เป็นมาตรฐานของตัวเลขโดยไม่มีหน่วยโดยนัย (23 บิต) มาดูกันดีกว่า 1) ลงชื่อบิต บิตที่สำคัญที่สุด (อันแรกจากซ้าย) จะถูกจัดสรรเสมอเพื่อเก็บเครื่องหมายของตัวเลข (1 ถ้าตัวเลขเป็นลบ และ 0 ถ้าตัวเลขเป็นบวก) ข้อยกเว้นอาจเป็นเลขศูนย์ - ในการเขียนโปรแกรม ศูนย์สามารถเป็นได้ทั้ง ค่าลบและค่าบวก 2)ถัดมาเป็นบิตของดีกรี (ลำดับ)ของเลขชี้กำลังที่มีฐาน2 สำหรับสิ่งนี้จะมีการจัดสรร 8 บิต ระดับเลขชี้กำลังของ เลข ทศนิยมดังที่เราทราบ อาจเป็นได้ทั้งค่าลบ (สำหรับตัวเลขที่ส่วนจำนวนเต็มเป็น 0 ดูย่อหน้าที่ 3.3) และค่าบวก (สำหรับตัวเลขที่ส่วนจำนวนเต็มแตกต่างจากศูนย์) และมีช่วงตั้งแต่2ˉ¹²⁷ ถึง 2¹²⁷ ตามทฤษฎี เราควรจัดสรรหนึ่งบิตเพื่อกำหนดเครื่องหมายของเลขชี้กำลัง เช่นเดียวกับในกรณีของบิตเครื่องหมาย แต่นั่นไม่เป็นความจริง เพื่อไม่ให้เสียเวลาในการกำหนดเครื่องหมายของเลขชี้กำลัง ตัวเลขทศนิยมจะเพิ่ม ค่าชดเชยให้กับเลขชี้กำลังครึ่งไบต์ +127 (0111 1111) ดังนั้นแทนที่จะเป็นช่วงของกำลังตั้งแต่ 2ˉ¹²⁷ ถึง 2¹²⁷ คอมพิวเตอร์จะเก็บช่วงของกำลังตั้งแต่ 0 ถึง +254 - ค่าพลังงานทั้งหมดเป็นค่าบวกไม่จำเป็นต้องเปลืองไบต์เพิ่มเติมบนเครื่องหมาย ปรากฎว่าค่าของเลขชี้กำลังเลื่อนไปครึ่งหนึ่งเมื่อเทียบกับค่าที่เป็นไปได้ ซึ่งหมายความว่าเพื่อให้ได้ค่าที่แท้จริงของเลขชี้กำลัง คุณต้องลบออฟเซ็ตนี้ออกจากค่าที่เก็บไว้ในหน่วยความจำ หากค่าเลขชี้กำลังที่เก็บอยู่ในหน่วยความจำน้อยกว่าค่าออฟเซ็ต (+127) เลขชี้กำลังจะเป็นลบ: นี่เป็นตรรกะ ตัวอย่าง. ลองทำการเปลี่ยนแปลงระดับลบ-18 . เราเพิ่มออฟเซ็ต +127 เข้าไปเราจะได้ค่าของดีกรี +108 (อย่าลืมค่าดีกรี 0 ในการคำนวณ) ลองแปลงดีกรีเป็นรูปแบบไบนารี่: 1101100 แต่หน่วยความจำ 8 บิตได้รับการจัดสรรสำหรับดีกรี และเราจะได้ตัวเลข 7 บิต แทนที่ตัวเลขสูงที่ว่างเปล่าและว่าง คอมพิวเตอร์จะเพิ่ม 0 ผลลัพธ์คือระดับนี้จะถูกเก็บไว้ในหน่วยความจำของคอมพิวเตอร์เป็น01101100 มาดูกัน: +108 < +127 ซึ่งหมายความว่าดีกรีเป็นลบจริงๆ พิจารณาตารางที่น่าสนใจต่อไปนี้: มันแสดงค่าที่เป็นไปได้ทั้งหมดของกำลังของตัวเลขทศนิยมในรูปแบบมาตรฐานในระบบไบนารี่และทศนิยม ดังที่เราเห็น ในระบบไบนารี่ +127 มีค่าเท่ากับครึ่งหนึ่งของไบต์ทั้งหมด (8 บิต) 3) ส่วน ที่เหลืออีก23 บิตถูกสงวนไว้สำหรับแมนทิสซา ยังไม่ได้อ่าน :))) ตัวเลขจริงในหน่วยความจำคอมพิวเตอร์  อยู่ระหว่างการพัฒนา!!!  - สิบเอ็ด. แต่สำหรับแมนทิสซาไบนารี่ที่ทำให้เป็นมาตรฐานบิตที่สำคัญที่สุด (หรือที่เรียกว่าส่วนจำนวนเต็มของแมนทิสซาที่ทำให้เป็นมาตรฐาน) จะเท่ากับ 1 เสมอ (เรียกว่าimplicit one ) เนื่องจากจำนวนของแมนทิสซาอยู่ในช่วง1<=M<2 (และ จำวรรค 2.1.1 ของการบรรยายด้วย) ข้อยกเว้นเพียงอย่างเดียวคือหมายเลข 0 ไม่มีประโยชน์ในการเขียนหน่วยลงใน 23 บิตที่ได้รับการจัดสรรและทำให้หน่วยความจำสิ้นเปลือง ดังนั้นส่วนที่เหลือของแมนทิสซา (ส่วนที่เป็นเศษส่วน) จะถูกเขียนลงใน 23 บิตที่ได้รับการจัดสรร ปรากฎว่าส่วนสำคัญของเลขทศนิยมนั้นมีความยาว 24 โดยพื้นฐานแล้วจะถูกเก็บไว้น้อยกว่าหนึ่งบิต ความแตกต่างที่สำคัญ ให้เราจำไว้ว่าเมื่อแปลงเลขเศษส่วนทศนิยมเป็นเลขฐานสอง เศษส่วนในระบบไบนารี่มักจะกลายเป็นตัวเลขขนาดใหญ่ และเรามีเพียง 32 บิตเท่านั้นที่จะเก็บตัวเลขทศนิยม ในกรณีนี้ เลขนัยสำคัญต่ำสุดและน้อยที่สุดของเศษส่วนไบนารี (โปรดจำย่อหน้าที่ 2.1.2 ของการบรรยายนี้) จะไม่รวมอยู่ในหน่วยความจำที่จัดสรร และคอมพิวเตอร์จะละเลย ความแม่นยำของตัวเลขจะหายไปแต่คุณเห็นไหมว่ามันน้อยมาก กล่าวอีกนัยหนึ่งความแม่นยำของเศษส่วนทศนิยมคือทศนิยม 6-7 ตำแหน่ง 4.4 การจัดเก็บรูปแบบไบนารี่นอร์มอลไลซ์เอ็กซ์โปเนนเชียลของตัวเลขสองเท่าในหน่วยความจำคอมพิวเตอร์ จำนวนจริงของประเภทdoubleจะถูกจัดเก็บไว้ในหน่วยความจำคอมพิวเตอร์ในลักษณะเดียวกับตัวเลขทศนิยม ยกเว้นคุณลักษณะบางประการ ตัวเลขคู่มี64 บิตในหน่วยความจำคอมพิวเตอร์ มีการกระจายดังต่อไปนี้ (ตามลำดับจากซ้ายไปขวา): 1) บิตเครื่องหมาย (ดูย่อหน้าที่ 4.3) เราเข้าใจว่าจำนวนของบิตนี้จะเป็น63 . 2) ปริญญา (ลำดับ) ตัวเลขคู่จะถูกจัดสรร11 บิต เพื่อจัด เก็บ มีการเปลี่ยน องศาด้วย แต่สำหรับตัวเลขสองเท่าจะเท่ากับ+1023 3) Mantissa (ส่วนสำคัญ) ตัวเลขคู่จะถูกจัดสรร52 บิต (หลัก) เพื่อจัดเก็บ นอกจากนี้ ส่วนจำนวนเต็มที่แน่นอนของแมนทิสซา ( หน่วยโดยนัย ) จะไม่ ถูกจัดเก็บไว้ ในหน่วยความจำ เป็นที่น่าสังเกตว่าความแม่นยำของเศษส่วนสองเท่านั้น มี ทศนิยม ประมาณ16 ตำแหน่ง 4.5 ตัวอย่างการแสดงจำนวนจริงของระบบทศนิยมในหน่วยความจำคอมพิวเตอร์ และประเด็นสุดท้ายของการบรรยายของเราจะเป็นตัวอย่างการแปลงเลขเศษส่วนของระบบเลขฐานสิบให้เป็นรูปแบบการจัดเก็บในหน่วยความจำคอมพิวเตอร์เพื่อรวบรวมความเข้าใจในหัวข้อนี้ ตัวอย่างที่ 1. รับตัวเลข-4.25แบบลูกลอย มานำเสนอในรูปแบบเอ็กซ์โปเนนเชียลนอร์มัลไลซ์ในระบบเลขฐานสอง โดยจดจำทุกสิ่งที่เราพูดถึงในการบรรยายนี้ 1)แปลงส่วนจำนวนเต็มของตัวเลขเป็นรูปแบบไบนารี่: 4/2 = 2 (ส่วนที่เหลือของการหาร0 ) 2/2 = 1 (ส่วนที่เหลือของการหาร0 ) ส่วนจำนวนเต็มจะเท่ากับ100ในระบบไบนารี่ 2)แปลงส่วนที่เป็นเศษส่วนของตัวเลขให้อยู่ในรูปแบบไบนารี 0.25*2 = 0.5 ( 0 ) 0.5*2 = 1.0 ( 1 ) เศษส่วนในระบบไบนารี่ จะเท่ากับ 0.01 3)ดังนั้น -4.25₁₀ = -100.01₂ 4)มาแปลงตัวเลข -100.01₂ เป็นรูปแบบเอ็กซ์โปเนนเชียลนอร์มอลไลซ์ในระบบเลขฐานสอง (ซึ่งหมายความว่าฐานของเลขยกกำลังจะเป็น 2) -100.01₂ = -1.0001 *2² มาแปลงค่าระดับจากรูปแบบทศนิยมเป็นไบนารี่กัน 2/2= 1 (เหลือ0 ) องศาคือ10₂ เราพบว่าตัวเลข -4.25₁₀ ในรูปแบบมาตรฐานเลขชี้กำลังแบบไบนารีจะเท่ากับ-1.0001 * 2¹º มาเขียนกันว่ามันจะมีลักษณะอย่างไรในหน่วยความจำคอมพิวเตอร์ บิตเครื่องหมายจะเป็น1 (จำนวนลบ) ค่าออฟเซ็ตเลขชี้กำลังเท่ากับ 2+127 = 129₁₀ = 10000001₂เราลบค่าโดยนัยออก จากแมนทิสซา เราได้รับ 00010000000000000000000 ( เราเติม บิตลำดับต่ำที่ว่างด้วยศูนย์ ) บรรทัดล่าง 1 10000001 0001000000000000000000 - นี่คือวิธีจัดเก็บตัวเลข -4.25 ในหน่วยความจำของคอมพิวเตอร์ ตัวอย่างที่ 2 แปลง ตัวเลข ทศนิยม0.75₁₀ เป็นรูปแบบหน่วยเก็บข้อมูลไบนารีในหน่วยความจำคอมพิวเตอร์ ผลลัพธ์ควรเป็น 0 01111110 100000000000000000000000 ขอบคุณสำหรับความสนใจ
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION