目次
1. Pii arvutamise tähtsus ja meetodid C-keeles
Pii (π) on defineeritud kui ringjoone ümbermõõdu ja diameetri suhe ning see on väga oluline konstant matemaatika, teaduse ja inseneriteaduse valdkondades. Pii arvutamine C-keeles aitab paremini mõista algoritme ja omandada arvutusmatemaatika aluseid. Selles artiklis selgitame samm-sammult erinevaid meetodeid pii leidmiseks C-keeles ning pakume praktilisi teadmisi neile, kes tunnevad huvi arvutusmeetodite vastu.2. Pii põhilised arvutusmeetodid C-keeles
Pii arvutamine Leibnizi rea abil
Leibnizi rida on lõpmatu rea meetod, millega saab pii arvutada järgmise valemi abil:
Näidisrakendus
Allpool on programm C-keeles, mis arvutab pii Leibnizi rea abil. Kasutaja määratud arv kordi kordamise järel saadakse pii ligikaudne väärtus.#include <stdio.h>
int main() {
int n, i;
double pi = 0.0;
int sign = 1;
printf("Sisestage arvutuste korduste arv: ");
scanf("%d", &n);
for (i = 0; i < n; i++) {
pi += sign * (4.0 / (2 * i + 1));
sign = -sign;
}
printf("Pii ligikaudne väärtus: %.15fn", pi);
return 0;
}
Eelised: Lihtne ja arusaadav teostus Puudused: Väga aeglane koondumine, ei sobi kõrge täpsuse saavutamiseks3. Monte Carlo meetodiga pii hinnang
Monte Carlo meetod kasutab juhuslikke punkte ringi sees ja väljaspool, et tõenäosuse abil hinnata pii väärtust.Näidisrakendus
Allpool on C-keeles programm, mis kasutab Monte Carlo meetodit pii ligikaudse väärtuse leidmiseks.#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int n, i;
int inside_circle = 0;
double x, y, pi;
printf("Sisestage punktide koguarv: ");
scanf("%d", &n);
srand(time(0));
for (i = 0; i < n; i++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
if ((x * x + y * y) <= 1) {
inside_circle++;
}
}
pi = 4.0 * inside_circle / n;
printf("Pii ligikaudne väärtus: %.15fn", pi);
return 0;
}
Eelised: Lihtne rakendus, õpetab tõenäosuse kontseptsiooni Puudused: Aeglane koondumine, ei sobi väga täpseks arvutuseks4. Gaussi–Legendre algoritm
Gaussi–Legendre algoritm on väga tõhus meetod, mis suudab väheste kordustega saavutada väga suure täpsuse.Näidisrakendus
#include <stdio.h>
#include <math.h>
int main() {
double a = 1.0;
double b = 1.0 / sqrt(2.0);
double t = 0.25;
double p = 1.0;
double pi;
int n, iterations;
printf("Sisestage iteratsioonide arv: ");
scanf("%d", &iterations);
for (n = 0; n < iterations; n++) {
double a_next = (a + b) / 2.0;
double b_next = sqrt(a * b);
double t_next = t - p * pow(a - a_next, 2);
a = a_next;
b = b_next;
t = t_next;
p = 2 * p;
}
pi = pow(a + b, 2) / (4 * t);
printf("Pii ligikaudne väärtus: %.15fn", pi);
return 0;
}
Eelised: Väga kiire koondumine, kõrge täpsus Puudused: Keerulisem rakendus, nõuab teadmisi arvutusmatemaatikast5. Täpsuse ja efektiivsuse võrdlus
Meetod | Täpsus | Koondumise kiirus | Täitmisaeg | Kasutusjuht |
---|---|---|---|---|
Leibnizi rida | Madal | Aeglane | Pikk | Algõppe harjutused |
Machini valem | Keskmine kuni kõrge | Kiire | Võrdlemisi lühike | Praktiline ligikaudne väärtus |
Monte Carlo meetod | Keskmine | Aeglane | Sõltub punktide arvust | Tõenäosus- ja statistikasimulatsioonid |
Gaussi–Legendre | Väga kõrge | Väga kiire | Lühike | Kõrge täpsusvajadus |