为什么有些时候会无端输出nan?
比如下面这份代码在53行输出了nan
#include<bits/stdc++.h>
#define y1 yfuck1111111111caonima
using namespace std;
const int maxn = 5e3 + 5;
double k[maxn], b[maxn];
int sx[maxn], sy[maxn];
inline int read() {
int ret = 0, f = 1;char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') f = -f;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
ret = (ret << 1) + (ret << 3) + (ch ^ 48);
ch = getchar();
}
return ret * f;
}
pair<double, double> solve(int x1, int x2, int y1, int y2) {
pair<double, double> answer;
if (y1 == y2) answer.first = 0;
else answer.first = abs(x1 - x2) * 1.00 / abs(y1 - y2);
answer.second = y1 - x1 * answer.first;
// cout << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << ' ';
// cout << answer.first << ' ' << answer.second << '\n';
return answer;
}
double jdy(int i, int j) {
double k1 = k[i], k2 = k[j], b1 = b[i], b2 = b[j];
// y = k1x + b1 = k2x + b2;
// (k1 - k2)x = b2 - b1;
// x = (b2 - b1) / (k1 - k2);
double x = (b2 - b1) / (k1 - k2);
return (k1 * x + b1);
}
int n;
double ans;
int main() {
n = read();
for (int i = 1;i <= n;i++) sx[i] = read(), sy[i] = read();
for (int i = 2;i <= n;i++) {
pair<double, double> x = solve(sx[i - 1], sx[i], sy[i - 1], sy[i]);
k[i] = x.first;
b[i] = x.second;
}
// for (int i = 1;i <= n - 1;i++) cout << "y = " << k[i] << "x + " << b[i] << '\n';
ans = -INT_MAX;
cout << jdy(2, 4) << '\n';
for (int i = 1;i < n;i++) for (int j = i + 1;j <= n;j++) ans = max(ans, jdy(i, j));
printf("%.2lf", ans);
return 0;
}