社区讨论

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 条回复,欢迎继续交流。

正在加载回复...