社区讨论
clang的long double问题
学术版参与者 3已保存回复 12
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 12 条
- 当前快照
- 1 份
- 快照标识符
- @mlj0xi59
- 此快照首次捕获于
- 2026/02/12 13:34 上周
- 此快照最后确认于
- 2026/02/14 21:30 5 天前
今天我在洛谷上刷这道题(P1409)时写出了如下代码:
CPP#include <iomanip>
#include <iostream>
using namespace std;
using ld = long double;
int n, m;
ld dp[1007][1007];
ld pw[1007];
signed main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n >> m;
pw[0] = 1.0l;
for (int i = 1; i <= n; i++)
pw[i] = pw[i - 1] * 0.5l;
dp[1][1] = 1.0l;
for (int i = 2; i <= n; i++) {
ld num = 1.0l / 6.0l;
for (int j = 2; j <= i; j++)
num = num / 2.0l + dp[i - 1][j - 1] / 3.0l;
dp[i][i] = num / (1 - pw[i]);
dp[i][1] = 1.0l / 6.0l + dp[i][i] / 2.0l;
for (int j = 2; j < i; j++)
dp[i][j] = dp[i][j - 1] / 2.0l + dp[i - 1][j - 1] / 3.0l;
}
cout << fixed << setprecision(9) << dp[n][m] << '\n';
}
我在本地(Windows)用clang 21.1.8输入样例
2 1时输出了0.000000000,可当我换用g++(本地+洛谷+hydro均可)又可以输出正常结果0.444444444(洛谷AC记录)是否有大佬知道这是什么原因造成的?
编译器:llvm-mingw 20251216 with LLVM 21.1.8(链接,ucrt+x86_64,截至发帖时已是最新版)
自测时发现将
long double改为double就不会出现问题,AtCoder的clang 21.1.0也没有问题。回复
共 12 条回复,欢迎继续交流。
正在加载回复...