double的精度问题
  • 板块学术版
  • 楼主52wyd
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/7 20:02
  • 上次更新2023/11/2 22:25:51
查看原帖
double的精度问题
816549
52wyd楼主2023/9/7 20:02

题目:CF1862D这是一个WA on test 10的代码,为什么二分中的if条件用double类型是错误的(我把条件中的运算换成__int128类型时就AC了)?

#include <bits/stdc++.h>
#define int long long
#define sz(a) ((int)a.size())
using namespace std;
using PII = pair<int, int>;
using i128 = __int128;
const int N = 2e5 + 10;

int n;
i128 lll = 1;

void solve() {
	cin >> n;
	
	int l = 2, r = n;
	while (l < r) {
		int mid = (l + r) / 2;
		if (1.0 * mid * (mid - 1) / 2 + 1e-6 >= n) { // 为什么用double时错误的? 
			r = mid;
		} else {
			l = mid + 1;
		}
	}

	cout << "        ";
	if (lll * l * (l - 1) / 2 == n) {
		cout << l << "\n";
	} else {
		cout << (l - 1) + n - (l - 1) * (l - 2) / 2 << "\n";
	}
}

signed main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int T = 1;
	cin >> T; cin.get();
	while (T --) solve();
	return 0;
}
2023/9/7 20:02
加载中...