คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 3
เพราะตัวเลขทศนิยมใน excel มันไม่ได้คำนวณเป็นฐานสิบ แต่เป็นทศนิยมฐานสองครับ
ในซอฟแวร์ Excel
1. ถ้าเอา -1 บวกทีละ 0.01
2. บังคับ Format Cell แสดงทศนิยมหลาย ๆ หลัก
เครื่องผมพอถึงครั้งที่ 57 มันจะกลายเป็น -0.429'999'999'999'000'000
ครั้งที่ 99 จะได้ -0.009'999'999'999'999'250'000
ครั้งที่ 100 จะได้ 0.000'000'000'000'000'752'869'988'573'934'00
ครั้งที่ 101 จะได้ 0.010'000'000'000'000'800'000'000'000'000'00
สาเหตุเป็นเพราะทศนิยมฐานสิบบางตัว สามารถเขียนในทศนิยมฐานสองได้เป็นการประมาณเท่านั้น
และเมื่อเราคำนวณหลาย ๆ ทบเข้าแบบนี้ ความคลาดเคลื่อนเกิดขึ้นได้ครับ
แต่จขกท. ลองลด Format ทศนิยมให้เหลือ 14 หลัก
หรือมี mantissa จำนวน 15 ตำแหน่งนัยสำคัญ
ทันใดนั้นความวุ่นวายทั้งหลายจะหายวับไปทันที
เพราะอะไร?
เพราะเกิดจากการปัดเศษทศนิยมตำแหน่งที่ 15
เพราะมาตรฐานการคำนวณทศนิยมฐานสองของ IEEE 754
กำหนดให้ double precision ใช้จำนวนบิต 64 บิต
ผลคือมีความแม่นยำในการแปลงไปกลับจากฐานสิบเป็นจำนวนหลักนัยสำคัญ 15 mantissa (mantissa หลักต่อ ๆ มาจะไม่เหมือนต้นฉบับ)
และ Excel ใช้ double precision ในการคำนวณครับ
พูดอีกนัยหนึ่ง Excel หรือโปรแกรมอื่นใดที่คำนวณทศนิยมเป็น double precision
เมื่อไหร่ที่ใช้คำนวณเงินในหลักสิบล้านล้าน 10,000,000,000,000.00
อาจจะมีการคลาดเคลื่อนในหลักหน่วยของเซนต์หรือสตางค์ + 0.01
ยังไงลองดูเล่น ๆ ครับ
[LIVE]
learn more => [Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
ในซอฟแวร์ Excel
1. ถ้าเอา -1 บวกทีละ 0.01
2. บังคับ Format Cell แสดงทศนิยมหลาย ๆ หลัก
เครื่องผมพอถึงครั้งที่ 57 มันจะกลายเป็น -0.429'999'999'999'000'000
ครั้งที่ 99 จะได้ -0.009'999'999'999'999'250'000
ครั้งที่ 100 จะได้ 0.000'000'000'000'000'752'869'988'573'934'00
ครั้งที่ 101 จะได้ 0.010'000'000'000'000'800'000'000'000'000'00
สาเหตุเป็นเพราะทศนิยมฐานสิบบางตัว สามารถเขียนในทศนิยมฐานสองได้เป็นการประมาณเท่านั้น
และเมื่อเราคำนวณหลาย ๆ ทบเข้าแบบนี้ ความคลาดเคลื่อนเกิดขึ้นได้ครับ
แต่จขกท. ลองลด Format ทศนิยมให้เหลือ 14 หลัก
หรือมี mantissa จำนวน 15 ตำแหน่งนัยสำคัญ
ทันใดนั้นความวุ่นวายทั้งหลายจะหายวับไปทันที
เพราะอะไร?
เพราะเกิดจากการปัดเศษทศนิยมตำแหน่งที่ 15
เพราะมาตรฐานการคำนวณทศนิยมฐานสองของ IEEE 754
กำหนดให้ double precision ใช้จำนวนบิต 64 บิต
ผลคือมีความแม่นยำในการแปลงไปกลับจากฐานสิบเป็นจำนวนหลักนัยสำคัญ 15 mantissa (mantissa หลักต่อ ๆ มาจะไม่เหมือนต้นฉบับ)
และ Excel ใช้ double precision ในการคำนวณครับ
พูดอีกนัยหนึ่ง Excel หรือโปรแกรมอื่นใดที่คำนวณทศนิยมเป็น double precision
เมื่อไหร่ที่ใช้คำนวณเงินในหลักสิบล้านล้าน 10,000,000,000,000.00
อาจจะมีการคลาดเคลื่อนในหลักหน่วยของเซนต์หรือสตางค์ + 0.01
ยังไงลองดูเล่น ๆ ครับ
[LIVE]
learn more => [Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
แสดงความคิดเห็น
ขอถามเรื่อง Excel หน่อยครับ
ทำไม -1.000000+0.1 ถึงเท่ากับ -0.900000000100000...
และทำไม -0.100000000001+0.1 เท่ากับ 0.00000000102695...
ขอบคุณครับ