关于nan
  • 板块学术版
  • 楼主封禁用户
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/10/21 11:58
  • 上次更新2024/10/21 15:34:00
查看原帖
关于nan
608410
封禁用户楼主2024/10/21 11:58

为什么有些时候会无端输出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;
}
2024/10/21 11:58
加载中...