Untitled
unknown
plain_text
2 years ago
1.7 kB
4
Indexable
#include <stdio.h>
#include <math.h>
double versiera(double x) {
// Верзьера Аньези: y = 1 / (1 + x^2)
return 1.0 / (1.0 + x * x);
}
double lemniscate(double x) {
// Лемниската Бернулли (для y > 0): r^2 = 2 * a^2 * cos(2 * theta), a = 1, x = sqrt(r^2) * cos(theta)
if (fabs(x) < 1e-7) return -1; // Приблизительное сравнение с 0 для избежания деления на 0
double r2 = 2 * cos(2 * atan(x));
if (r2 <= 0) return -1; // Функция не определена для отрицательных значений r^2
double y = sqrt(r2 / (1 + x * x));
return isnan(y) ? -1 : y;
}
double hyperbola(double x) {
// Квадратичная гипербола: y = 1 / x
if (fabs(x) < 1e-7) return -1; // Приблизительное сравнение с 0 для избежания деления на 0
double y = 1.0 / x;
return isnan(y) ? -1 : y;
}
int main() {
double x, dx = 2 * M_PI / 41; // Шаг для 42 замеров
for (int i = 0; i <= 41; i++) {
x = -M_PI + i * dx;
double y1 = versiera(x);
double y2 = lemniscate(x);
double y3 = hyperbola(x);
printf("%.7f | ", x);
if (isnan(y1) || y1 < 0) {
printf("- | ");
} else {
printf("%.7f | ", y1);
}
if (isnan(y2) || y2 < 0) {
printf("- | ");
} else {
printf("%.7f | ", y2);
}
if (isnan(y3) || y3 < 0) {
printf("-\n");
} else {
printf("%.7f\n", y3);
}
}
return 0;
}
Editor is loading...
Leave a Comment