[C++] - ค่า PI

สวัสดีทุกท่าน

หลังจากผมมี Internet ใช้ที่บ้าน เหมือนชาวโลกเค้าแล้ว ก็เลยอยากจะ Update blog เน่าๆ นี้หน่อย

วันนี้ขอนำเสนอบทความเกี่ยวกับค่า PI บทความนี้จริงๆ ได้ถูกตีพิมพ์ในเดือนพฤษภาคมปี 2003 ใน "C/C++ User Journal" ที่หายสาบสูญไปแล้ว (ไปรวมกับ Dr. Dobb's Journal) - ขอไว้อาลัย ณ. ที่นี้

ผมจะเขียนมันขึ้นจากความทรงจำน่ะหล่ะ

ค่า PI ใน library ของภาษา C++ นั้นไม่ได้ถูก define ไว้ เพราะฉะนั้น เวลาเราจะใช้เรา ก็ต้องทำการ define มันขึ้นมา


  #define PI 3.141926535897932384626433832795
 
เห็นอะไรไหมเอ่ย คือค่าข้างบนนี้เราพิมพ์ตกไปตัวนึง ที่ถูกต้องคือ


  #define PI 3.1415926535897932384626433832795
 
อันนี้เป็นปัญหาค่า Constant value ในโปรแกรมต่างๆ ของเรา แต่เป็นโชคดีของ ค่า PI ที่เรามันวิธีแก้ปัญหานี้อย่างฉลาดๆ

เนื่องจาก Intel math co-processor ได้รวมคำสั่ง ที่สามารถนำ ค่า PI จาก processor มา push ลง stack ได้ คือ fldpi ดูตัวอย่างนะครับ


  #include "stdio.h"
  
  class cPI
  {
   public:
   operator double () const
   {
   double Pi;
   _asm
   {
   fldpi; // Push the constant pi to the x87 stack
   fst Pi; // Store to Pi
   }
   return Pi;
   }
  };
  
  static cPI PI;
  
  int main()
  {
   double x = PI;
  
   printf("Pi = %f\n", x);
  
   return 0;
  }
  
วิธีการนี้คือ เราสร้าง class cPI ขึ้นแล้ว overload double operator เพื่อทำ implicit conversion สำหรับตัวแปร double (ข้อดีของวิธีนี้ คือ จะเห็นได้ว่าตอนเรียกใช้ ค่า PI มันจะเหมือนเป็นตัวแปรตัวนึงเลย ไม่ได้อยู่ในรูป function)

จากนั้นใน function เราก็ return ค่า PI ออกมาจาก processor เท่านั้นเอง

จบแล้วครับ หวังว่าจะได้มาเขียนอีกบ่อยๆ เนี่ย เสียค่าเน็ทเดือนตั้งแพง เดี๋ยวใช้ไม่คุ้มหล่ะแย่เลย



Create Date : 31 มีนาคม 2550
Last Update : 30 ตุลาคม 2550 11:20:30 น. 0 comments
Counter : 1341 Pageviews.  

ชื่อ : * blog นี้ comment ได้เฉพาะสมาชิก
Comment :
  *ส่วน comment ไม่สามารถใช้ javascript และ style sheet
 

กะต่อ
Location :
กรุงเทพ Thailand

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed

ผู้ติดตามบล็อก : 1 คน [?]




เพราะทำงานกับเครื่องจักรเลยคิดว่าตัวเองเป็นศิลปิน ออกจะเรื่อยเปื่อย ไม่งอก ไม่ริเริ่มอะไรบ้าง ก็ดี เพราะถ้าเริ่มได้ ก็ต้องจบให้ได้ ฮว๊าก..
[Add กะต่อ's blog to your web]