CONTACT | TEL : 02-728-3440, EMAIL : SALES@ASTRONLOGIC.COM
ASTRON LOGIC RESEARCH AND DEVELOPMENT CO.,LTD.

» WEBBOARD

ผมสงสัยการว่าคำนวนแบบ Fixed Point & Floating Point ทำยังไง

ถ้าผมต้องการคำนวนเลขฐาน 10 ที่มีจุดทศนิยม 4 ตำแหน่ง (*.****) ถ้าใช้การคำนวนแบบ Fixed Point จะใช้ข้อมูลกี่ Bit สำหรับเลขหลังจุดทศนิยม และถ้าใช้การคำนวนแบบ Floating Point จะใช้กี่ Bit และควรจะใช้เลขฐาน 2 แบบ 1' s Complement หรือ 2' s Complement เพื่อที่จะใช้ Hardware น้อยที่สุด

จากคุณ : พี่เหงี่ยม ตั้งกระทู้นี้เมื่อ 17:01 [11/06/2002]

ความคิดเห็นที่1

แบบ Fixed Point
=============
ต้องการความละเอียดขนาด 0.0001 หน่วย ดังนั้นจำเป็นต้องใช้
-log2(0.0001) = 13.28 => 14 บิท
ในการแทนเลขหลังจุดครับ และถ้ารวมตัวเลขหน้าจุดด้วย เช่น
ต้องการช่วงระหว่าง 0 - 127 ก็จะแทนอีก
7 บิท รวมจะใช้ทั้งหมด
14 + 7 = 21 บิท แทนเลขข้างต้นซึ่งจะมีช่วงตั้งแต่
000 0000.0000 0000 0000 00 (0)
ถึง
111 11111.11111 11111 11111 11 ((2^21-1) /2^14) = 127.99993896484375

จากคุณ : :) 18:57 [12/06/2002]

ความคิดเห็นที่2

ส่วน Floating Point
ไม่ทราบต้องการความละเอียดขนาดไหน ซึ่งจะเป็นตัวกำหนด
จำนวนบิทใน mantisa จึงยังไม่รู้จะตอบ ยางงายดี

ส่วนการกำหนดว่าจะเป็น 1 หรือ 2'complement ขึ้นกับงานอ่ะ
ว่าเป็นยังเดี๋ยวจะบอกข้อดีข้อเสียให้
1'complement
- ส่วนคำนวณหนักหน่อย
- แต่ส่วนเชื่อมต่อ เฃ่น ตัวแสดงผลจะง่ายกว่า
2'complement
- ส่วนคำนวณง่ายกว่าแค่ adder ก็ได้แล้ว
- แต่ส่วนเชื่อมท่าจะยากกว่า

โดยรวมๆ ผมว่า 2'complement ท่าจะดีแต่ก็ขึ้นกับงานอีกนั่นแหล่ะ

จากคุณ : :) 19:16 [12/06/2002]

ความคิดเห็นที่3

เก่งจังเลย

จากคุณ : ปลืม 23:18 [12/06/2002]

ความคิดเห็นที่4

ถ้า Floating Point ผมต้องการความละเอียดที่ 127.0001 ผมต้องใช้ทั้งหมดกี่ BIT ครับ และรบกวนช่วยแนะนำหนังสือที่พูดถึงเรื่องของการ บวก,ลบ,คูณ,หาร โดยใช้ Hardware หรือ Web ก็ได้ครับ ขอบคุณมากครับ

จากคุณ : พี่เหงี่ยม 08:13 [13/06/2002]

ความคิดเห็นที่5

คืองี้นะครับ
แบบ Fixed Point น่ะตัวเลขแต่ละตัวจะมีระยะเท่ากัน เช่น
ระยะห่าง 0.125D (0.001B) หน่วยก็จะมีเซตเป็นเลข เช่น
0.125, 0.250, 0.375, 0.500, 0.625,...

ส่วนแบบ Floating Point ตัวเลขจะมีระยะเท่ากันเป็น ช่วงๆ เช่น

0.125x(2^0), 0.250x(2^0), 0.375x(2^0), ...,
0.125x(2^1), 0.250x(2^1), 0.375x(2^1), ...,
0.125x(2^2), 0.250x(2^2), 0.375x(2^2), ...

จะเห็นว่าในแต่ละค่ายกกำลังจะมีระยะห่างเท่ากันแต่ระหว่างค่ายกกำลังมันจะ
ไม่เท่ากัน

เพราะฉะนั้นที่คุณว่าต้องการละเอียดถึง 127.0001 นั้นสำหรับ Fixed Point ก็ข้างต้น ซึ่งแต่ละจุดจะห่างกันเท่ากับ 0.00006103515625 หน่วย

แต่ในกรณีของ Floating Point ผมว่ามันขึ้นกับว่าจะแทน mantissa เท่าไหร่ดี
เพราะในกรณีเช่น
คุณมี mantissa เป็นเซตต่อไปนี้
{0.0, 0.25, 0.50, 0.75} และมี
exponential เป็นบวกตั้งแต่ 0 ถึง 10 คุณก็จะแทนค่าได้ตั้งแต่ 0.0 ไป จนถึง
0.75x (2^10) แต่ก็มีนัยสำคัญแค่ 2 ตัว
นั่นคือถ้าตัวเลขยิ่งใหญ่มากค่าพวกท้ายๆ หรือจุดทศนิยมจะไม่ละเอียด ดังนั้นเมื่อต้องการละเอียดก็ต้องเพิ่มความละเอียดของ mantissa เอาน่ะครับ ซึ่ง
มันก็คิดคล้ายๆ กันกับ แบบ floating point

จากคุณ : :) 16:54 [13/06/2002]

ความคิดเห็นที่6

http://mos.stanford.edu/papers/ms_isscc_88.pdf [A Pipelined 64x64b Iterative Array Multiplier]
http://cch.loria.fr/documentation/IEEE754/patterson/slides.pdf [Lecture 7: Divide, Floating Point, Pentium Bug]
http://www.ece.ucsb.edu/courses/ECE154/ece154-6.pdf [Multiply]
http://www.ece.ucsb.edu/courses/ECE154/ece154-7.pdf [Divide and Floating Point]
http://www.cis.hut.fi/Opinnot/T-61.123/Luentokalvot2001/Lec04_6.pdf [Shifters, Divide, Floating Point]

จากคุณ : :( 19:07 [13/06/2002]

ความคิดเห็นที่7

ทำไมต้องเอามาคิด มันไม่มีความสำคัญต่อการคำนวณ

จากคุณ : eaw 21:40 [13/06/2002]

ความคิดเห็นที่8

ถ้าไม่มีความสำคัญก็คงไม่จำเป็นต้องใช้มันดอกครับ

จากคุณ : :( 11:10 [14/06/2002]

ความคิดเห็นที่9

ขอบคุณ คุณ : มากๆเลยครับผมได้ความรู้เพิ่มขึ้นเยอะเลย

จากคุณ : พี่เหงี่ยม 16:13 [18/06/2002]
ร่วมด้วยช่วยกันตอบครับ
ชื่อ :
E-Mail :
คำตอบ :







คลิกเพื่อแทรกรูป