חילוק ב c++ - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

חילוק ב c++


Nullity

Recommended Posts

תוכנית קטנה שכתבתי -

#include <iostream>

void main(void)

{

float pi = 1.0;

int i;

for (i=1;i<100;++i)

{

pi = pi + 1 / (4*i + 1);

pi = pi - 1 / (4*i - 1);

}

std::cout << 4*pi;

}

משום מה, התוכנית מחזירה פשוט את המספר 4 (כלומר, 1*4). שמתי לב שהנקודה הבעייתית היא באחד חלקי (4*i + 1)  - זה משום מה לא מקבל את זה, בעוד שאם אני למשל אכתוב pi = pi + 0.5 זה יעבוד טוב. מה אני עושה לא נכון?

קישור לתוכן
שתף באתרים אחרים

כדי שתוצאת חלוקה תהיה לא בשלמים אזי או המחלק או המחולק חייבים להיות מטיפוס לא שלם.

למעשה דבר זה נכון לכל פעולות החשבון ולכן

(4*i - 1.0)

הוא מסוג לא שלם וכך גם כל החילוק.

בלינק יש קצת יותר מידע (מסודר בצורת חוקי הרובוטים של אסימוב - שמסתדר לי נורא עם microsoft הידועים כ - the borg  ;D )

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_pluslang_arithmetic_conversions.asp

דרך אגב יש שיטות קירוב הרבה יותר טובות ל - PI.

1/PI = (sqrt( 8 ) / 9801) sumk=0~inf { [(4k)! (1103 + 26390k)] / [(k!)4 3964k] } (Ramanujan)

1/PI = (sqrt(10005) / 4270934400) sumk=0~inf { [(6k)! (13591409 + 545140134k)] / [(k!)3 (3k)! (-640320)3k] } (Chudnovsky)

שתי סדרות אלו מבטיחות לך התכנסות תותחית. (הרבה הרבה הרבה פחות מ 10000 איטרציות)

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...