Vaja 02 Fakulteta

This commit is contained in:
Gašper Dobrovoljc 2024-03-14 11:30:29 +01:00
parent 8e0baa5eb7
commit b7a5965a7d
No known key found for this signature in database
GPG Key ID: 0E7E037018CFA5A5

94
src/Vaja02Fakulteta.java Normal file
View File

@ -0,0 +1,94 @@
public class Vaja02Fakulteta {
public static void main(String[] args) {
// izpisL();
// izpisD();
// izpisPiNilakantha();
System.out.println(izracunajPi(5));
}
static long fakultetaL(int n) {
long x = 1;
while (n > 1) {
x *= n;
n--;
}
return x;
}
static long stirlingL(int n) {
return Math.round(Math.sqrt(2 * Math.PI * n) * Math.pow(n / Math.E, n));
}
static void izpisL() {
System.out.println(
" n n! Stirling(n) napaka (%)\n" +
"----------------------------------------------------------"
);
for (int i = 1; i <= 20; i++) {
long fakulteta = fakultetaL(i);
long stirling = stirlingL(i);
float napaka = (1 - (float) stirling / fakulteta) * 100;
System.out.printf("%3d %20d %20d %10.7f\n", i, fakulteta, stirling, napaka);
}
}
static double fakultetaD(int n) {
double x = 1;
while (n > 1) {
x *= n;
n--;
}
return x;
}
static double stirlingD(int n) {
return Math.sqrt(2 * Math.PI * n) * Math.pow(n / Math.E, n);
}
static void izpisD() {
System.out.println(
" n n! Stirling(n) napaka (%)\n" +
"----------------------------------------------------"
);
for (int i = 1; i <= 100; i++) {
double fakulteta = fakultetaD(i);
double stirling = stirlingD(i);
double napaka = (1 - stirling / fakulteta) * 100;
System.out.printf("%3d %17.9E %17.9E %11.7f\n", i, fakulteta, stirling, napaka);
}
}
static double izracunajPiNilakantha(int k) {
double x = 3;
for (int i = 0; i < k; i++) {
double a = 4.0 / ((2 + 2 * i) * (3 + 2 * i) * (4 + 2 * i));
if (i % 2 == 0) {
x += a;
} else {
x -= a;
}
}
return x;
}
static void izpisPiNilakantha() {
System.out.println(" k Math.PI PI (Nilakantha) razlika \n" +
"-----------------------------------------------------------------");
for (int i = 1; i <= 22; i++) {
double nilakantha = izracunajPiNilakantha(i);
System.out.printf("%3d %19.15f %19.15f %+20.15f\n", i, Math.PI, nilakantha, Math.PI - nilakantha);
}
}
static double izracunajPi(int k) {
double x = Math.pow(k, 2) / (k * 2 - 1);
for (int i = k; i > 1; i--) {
x = Math.pow(i - 1, 2) / (((i - 1) * 2 - 1) + x);
}
return 4 / x;
}
}