(0.148) (0.00100101111.) 2 เราเปลี่ยน 3 บิตไปทางซ้ายเพื่อให้เป็น normalised (1.00101111) 2 2. เลขยกกำลัง 1164 (75) (1001011) 2 และ Mantissa (01001111) 2. ดังนั้นถ้าเราเก็บ mantissa denormalized ลงในการลงทะเบียน 8 bit แล้วมันเคยชินเก็บไว้สาม 1s แล้ว mantissa จะมี normalized จาก (0.00100101) 2 (1.00101000. ) 2 โดยการใส่ 3 0s แทน 1s การแทนจะเป็น (0100101100101000) 2 (4B28) การเป็นตัวแทน B ในขณะที่ normalizing โปรเซสเซอร์จะคำนึงถึงชิ้นส่วนของ mantissa ที่มีขนาด denormalized เกินกว่า 8 บิตหรือเพียงแค่ตัดมันออกหนึ่งอันไหนถูกต้อง: A หรือ B เก็บไว้ใน mantissa ในการแสดงจุดคงที่วิธีการทั้งหมดที่ workIm เล็กน้อยสับสนเกี่ยวกับวิธีการปกติตัวเลขใน C. ฉันรู้ว่าถ้าคุณมีสิ่งที่ต้องการทศนิยมค่าไบนารีทศนิยม 1101.101 จะเป็นนัยเป็น 1.101101 x 23 โดยการย้ายทศนิยม 3 ตำแหน่ง ไปทางซ้าย. แต่ผมไม่แน่ใจว่าจะทำอย่างไรในโค้ด ดังนั้นถ้าฉันมี 10010000 exp 0 และฉันต้องการได้รับ 01001000 exp 1 ฟิลด์เศษส่วนคือ 001 และผลสุดท้ายคือ 010001 ถ้าฉันมีหมายเลข 8 บิตและ 2 บิตชั้นนำเป็น 00 ฉันต้องการย้ายไปจนกว่าฉัน หา 1 หรือถ้าฉันมีบิตชั้นนำของ 01 แล้วก็เป็นเรื่องปกติแล้ว คล้ายกันสำหรับนำ 2 บิตจาก 11 ฉันย้ายไปทางซ้าย ดังนั้นถ้าจำนวนของฉันคือ 32 บิต 1 สำหรับเครื่องหมาย 8 สำหรับเลขชี้กำลัง 23 สำหรับ Mantra ผมจะทำอะไรเช่น: แล้วอีกหลายถ้างบอื่น ๆ 2 นำบิตจำนวน (00, 10) ฉันไม่ได้ แน่ใจว่า logiccode ของฉันถูกต้อง เช่นเดียวกับที่คุณพูดคุณต้องแยกเครื่องหมาย mantissa และเลขยกกำลัง แผนผังข้างต้นนำมาจากวิกิพีเดียแสดงให้เห็นว่ามีการวางรูปแบบจุดลอยตัวที่มีจุดเด่นที่สุดแบบเดียวคือ IEEE 754 ในการแยกแต่ละส่วนที่เราต้องทำในสามขั้นตอนด้านล่างนี้ ฉันไม่มีรหัส C แต่ฉันจะแสดงขั้นตอนที่คุณต้องทำ หลังจากสกัดทั้ง 3 ส่วนแล้วให้วางตำแหน่งบิตไว้ในแผนภาพด้านบน ถ้าเป็นตัวเลขที่ไม่ได้ลงนามนี้เสมอ 0. ถ้า MSB ลงนาม 2. เลขคณิตหากตัวเลขมีการเซ็นชื่อและลบคุณจะต้องพลิกบิตทั้งหมดและเพิ่ม 1 เพื่อทำให้เป็นบวก ถ้าคุณไม่สามารถปล่อยให้มันเหมือนเดิมได้ ในการแยกเลขชี้กำลังเราต้องทราบว่าจุดไบนารีเป็นไปได้อย่างไร ให้ตำแหน่งของจุดไบนารีเป็น b (ในตัวอย่างของคุณคือ 3) ปล่อยบิตแรกจาก MSB ที่ 1 เป็น p (ในตัวอย่างของคุณคือ 6) ให้เลขชี้กำลังเป็น e. 3. Mantissa นี้จะเท่ากับบิตจากตำแหน่ง p-1 ลงไป 0.Im bit พยายามแปลง int ลงลอยที่กำหนดเองซึ่งในผู้ใช้ระบุจำนวนบิตที่สงวนไว้สำหรับ exp และ mantissa แต่ I dont เข้าใจว่า Conversion ทำงานอย่างไร ฟังก์ชันของฉันใช้ค่า int และ int exp เพื่อแสดงจำนวน (value 2exp) คือค่า i. e 12, exp 4 คืน 192 แต่ฉันไม่เข้าใจขั้นตอนที่ฉันต้องทำเพื่อเปลี่ยนแปลงค่าเหล่านี้ Ive รับการมองหาที่นี้สำหรับวันและเล่นกับปพลิเคชันเว็บ IEEE แปลง แต่ฉันก็ไม่เข้าใจสิ่งที่กระบวนการ normalization คือ เช่นฉันเห็นว่าย้ายจุดไบนารีและปรับเลขชี้กำลัง แต่ฉันไม่มีความคิดสิ่งนี้หมายความว่าทุกคนสามารถให้ฉันเป็นตัวอย่างไปปิดนอกจากนี้ฉัน dont เข้าใจสิ่งที่อคติเป็นสัญลักษณ์ ข้อมูลเดียวที่ฉันมีคือคุณเพียงแค่เพิ่มตัวเลขลงในเลขชี้กำลังของคุณ แต่ฉันไม่เข้าใจว่าเพราะเหตุใด ฉันได้รับการค้นหา Google สำหรับตัวอย่างที่ฉันสามารถเข้าใจ แต่นี้ก็ไม่ได้ทำให้รู้สึกใด ๆ กับฉันถาม 1 มีนาคม 15 เวลา 23:31 U2EF1 ดังนั้นฉันจะรู้ว่ากี่ครั้งจะต้องเลื่อนไปเช่นถ้าผู้ใช้ specifices 4 บิตสำหรับ mantissa และค่าเป็น 3 ฉันจะรู้ว่าจะเปลี่ยน 0011 ไป 1000 ฉันสามารถบางอย่างเช่นได้รับ maxval pow (2, ltspecified mant. bitsgt) -1 แล้วเปลี่ยนค่า (0011) จนถึงค่า gt maxval และ มีจำนวนตัวนับติดตามได้กี่ครั้งฉันทำ ndash Tommy K Mar 1 15 at 23:51 หมายเลขจุดลอยเป็น normalized เมื่อเราบังคับส่วนจำนวนเต็มของ mantissa ให้ตรง 1 และให้ส่วนเศษของมันเป็นสิ่งที่เรา ชอบ. ตัวอย่างเช่นถ้าเราใช้หมายเลข 13.25 ซึ่งเป็นเลขฐานสิบหก 1101.01 ใน 1101 จะเป็นส่วนที่เป็นจำนวนเต็มและ 01 จะเป็นส่วนของเศษส่วน ฉันสามารถแสดง 13.25 เป็น 1101.01 (20) แต่นี่ไม่ใช่เรื่องปกติเพราะส่วนจำนวนเต็มไม่ใช่ 1 อย่างไรก็ตาม เราได้รับอนุญาตให้เลื่อน mantissa ไปทางขวาหนึ่งหลักถ้าเราเพิ่มเลขยกกำลังโดย 1: การแสดงนี้ 1.10101 (23) เป็นรูปแบบปกติของ 13.25 ที่กล่าวว่าเรารู้ว่าตัวเลขจุดลอยปกติจะมาในรูปแบบ 1.fffffff (2exp) เพื่อประโยชน์ sake เรา dont รำคาญการจัดเก็บส่วน 1 จำนวนเต็มในการแสดงไบนารีเองเราก็ทำเป็นว่ามี ดังนั้นถ้าเราจะให้ของคุณที่กำหนดเองทำ 5 ประเภทลอยสำหรับ Mantra เราจะรู้ว่าบิต 10100 จริงจะยืนสำหรับ 1.10100 นี่คือตัวอย่างที่มี mantissa 23-bit มาตรฐาน: สำหรับความคลาดเคลื่อนของเลขยกกำลังลองดูรูปแบบ float มาตรฐาน 32 บิตซึ่งแบ่งออกเป็น 3 ส่วนคือบิตเครื่องหมาย 1 บิตเลขยกกำลัง 8 และ mantissa bits 23 ตัว : เลขชี้กำลัง 00000000 และ 11111111 มีจุดประสงค์พิเศษ (เช่นแทน Inf และ NaN) ดังนั้นด้วยบิตเลขยกกำลัง 8 เราสามารถแสดงเลขยกย่องได้ 254 รายการเช่น 21 ถึง 2254 ตัวอย่างเช่น แต่ถ้าเราต้องการแสดง 2-3 เราจะได้รับ exponents ลบรูปแบบการแก้ไขปัญหานี้ได้โดยการลบ 127 โดยอัตโนมัติจากเลขชี้กำลัง ดังนั้น: 0000 0001 จะเป็น 1 -127 -126 0010 1101 จะเป็น 45 -127 -82 0111 1111 จะเป็น 127-127 0 1001 0010 จะเป็น 136-127 9 การเปลี่ยนแปลงช่วงเลขยกกำลังตั้งแต่ 21 2254 ถึง 2-126 2127 เพื่อให้เราสามารถเป็นตัวแทนของ exponents ลบได้ กระบวนการสร้างมาตรฐานจะแปลงอินพุตให้อยู่ในช่วงที่เลือก binary32 คาดว่า significand (ไม่ใช่ mantissa) จะอยู่ในช่วง 1.0 lt s 2.0 ถ้าตัวเลขมีเลขยกกำลังต่ำสุด ตัวอย่าง: ค่า 12, exp 4 เป็นค่าเดียวกับค่า 12 (222), exp 4 3 ค่า 1.5, exp 7 เนื่องจาก significand มีเลขนำเสมอที่ 1 (เว้นไว้แต่ว่าตัวเลขมีเลขอย่างน้อยที่สุด) ไม่จำเป็นต้องมี เก็บไว้ แทนที่จะจัดเก็บเลขยกกำลังเป็น 7 จะมีการเพิ่มอคติของ 127 ลงไป ค่าทศนิยม 1.5 - 1.1000 000 ไบนารี - 0.1000 000 ที่เก็บไว้ binary (23 บิตในทั้งหมด) exp 7 - bias exp 7 127 - 134 ทศนิยม - 10000110 ไบนารีรูปแบบไบนารีที่เก็บไว้คือ concatenation ของเครื่องหมาย significand กับชั้นนำ 1 บิตโดยนัยและเลขยกกำลังลำเอียงเมื่อลำเอียง เลขยกกำลังคือ 0 - ค่าต่ำสุดบิตที่บอกโดยนัยคือ 0 และสามารถจัดเก็บหมายเลขขนาดเล็กเช่น 0.0 ได้ เมื่อเลขยกกำลังสองเป็น 255 - ค่าสูงสุดข้อมูลที่เก็บไว้จะไม่เป็นตัวเลขที่แน่นอน แต่เป็นอินฟินิตี้และไม่ใช่ตัวเลข ตรวจสอบลิงก์ที่อ้างอิงเพื่อดูรายละเอียดเพิ่มเติม Tommy - chux และ eigenchris พร้อมกับคนอื่น ๆ ได้ให้คำตอบที่ดี แต่ถ้าฉันกำลังมองหาที่ความคิดเห็นของคุณอย่างถูกต้องคุณยังคงดูเหมือนจะดิ้นรนกับถั่วและ bolts ของฉันจะใช้ข้อมูลนี้แล้วใช้นี้ ในการสร้างการลอยแบบกำหนดเองที่ผู้ใช้ระบุจำนวนของบิตสำหรับเลขยกกำลัง Dont รู้สึกไม่ดีมันเป็นที่ชัดเจนเป็นโคลนโหลครั้งแรกที่คุณผ่านมัน ฉันคิดว่าฉันสามารถแทงที่ล้างขึ้น คุณคุ้นเคยกับการแสดง IEEE754-Single-Precision-Floating-Point ของ: บิตการลงชื่อแบบ 1 บิต เลขยกกำลัง 8 บิต (ในส่วนที่เกิน 127 บิต) และเทพนิยาย 23-bit ที่เหลือ เมื่อคุณอนุญาตให้ผู้ใช้เลือกจำนวนบิตในเลขชี้กำลังคุณจะต้องแก้ไขข้อมูลเลขชี้กำลังซ้ำเพื่อทำงานกับขีด จำกัด ที่ผู้ใช้เลือกใหม่ สิ่งที่จะเปลี่ยนมันจะเปลี่ยนการจัดการบิตลงทะเบียน - ไม่มี มันจะเปลี่ยนการจัดการ mantissa - ไม่ (คุณจะยังคงแปลง mantissasignificand ไปยังรูปแบบบิตที่ซ่อนอยู่) ดังนั้นสิ่งเดียวที่คุณต้องมุ่งเน้นคือการจัดการเลขชี้กำลัง วิธีการที่คุณจะเข้าใกล้ Recall นี้สัญลักษณ์เลข 8 บิตในปัจจุบันอยู่ในสิ่งที่เรียกว่าเกิน 127- สัญกรณ์ (โดยที่ 127 หมายถึงค่าที่ใหญ่ที่สุดสำหรับ 7 บิตทำให้มีอคติใด ๆ ที่จะมีอยู่และแสดงออกภายในวงเงิน 8 บิตปัจจุบันถ้า ผู้ใช้เลือก 6 บิตเป็นขนาดเลขชี้กำลังแล้วสิ่งที่คุณจะต้องให้วิธีการคล้าย ๆ กันเพื่อประกันคุณมีจำนวนคงที่เพื่อแสดงสัญกรณ์ส่วนเกินใหม่ที่จะทำงานภายในขีด จำกัด ของผู้ใช้ใช้วงเงินผู้ใช้ 6 บิตจากนั้น (ค่าที่ใหญ่ที่สุดที่สามารถแสดงใน 5 บิต) เพื่อที่คุณสามารถใช้ตรรกะเดียวกัน (การตัวอย่าง 13.25 ข้างต้น) แทนไบนารีของคุณสำหรับจำนวนคือ 1101.01 ที่คุณย้ายตำแหน่งทศนิยม 3 ตำแหน่งไปทางซ้ายเพื่อให้ได้ตำแหน่ง 1.10101 ซึ่งจะให้ค่าความชอบของเลขยกกำลัง 3. ในกรณีเลขยกกำลัง 6 บิตของคุณคุณจะเพิ่ม 3 31 เพื่อให้ได้สัญกรณ์ส่วนเกิน 31 สำหรับเลขยกกำลัง 100010 จากนั้นใส่ มูนิสอลในรูปแบบบิตที่ซ่อนอยู่ (เช่นวาง le ading 1 จาก 1.10101 ส่งผลให้ Tommy Precision Representation แบบใหม่ของคุณ: ด้วยเครื่องหมายบิต 1 บิต เลขยกกำลังเชิงมุม 6 บิต (ในส่วนที่เกิน 31-bit) และเทพธิดา 25 บิตที่เหลือ กฎเดียวกันจะใช้กับการย้อนกระบวนการเพื่อให้หมายเลขจุดลอยตัวของคุณกลับมาจากสัญกรณ์ด้านบน (เพียงใช้ 31 แทน 127 เพื่อกลับอคติออกจากเลขชี้กำลัง) หวังว่าจะช่วยในทางใดทางหนึ่ง ฉันไม่เห็นอะไรที่คุณสามารถทำได้หากคุณต้องการให้มีขนาดของเลขชี้กำลังที่ผู้ใช้เลือกอย่างแท้จริง โปรดจำไว้ว่ามาตรฐาน IEEE-754 ไม่ได้เป็นสิ่งที่คาดเดาได้และมีเหตุผลที่ดีและการไม่ชอบการค้าต่างๆเข้ามาในรูปแบบเลขชี้กำลังของ mantissa 1-8-23 อย่างไรก็ตามผมคิดว่าการออกกำลังกายของคุณเป็นสิ่งที่ดีในการทำให้คุณต้องเข้าใจมาตรฐานอย่างชัดเจน ตอนนี้หายไปโดยสิ้นเชิงและไม่ได้กล่าวถึงในการอภิปรายนี้คือสิ่งที่ผลกระทบนี้จะมีต่อช่วงของตัวเลขที่อาจแสดงใน Custom Precision Floating Point นี้ได้ ฉันมองไม่เห็น แต่ข้อ จำกัด หลักดูเหมือนจะลด MAXMIN ที่สามารถแสดงได้ ตอบเมื่อวันที่ 2 มี.ค. เวลา 10:53 น
No comments:
Post a Comment