关于 __float128
  • 板块学术版
  • 楼主MYLHF
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/5/6 15:58
  • 上次更新2024/5/6 19:42:43
查看原帖
关于 __float128
542505
MYLHF楼主2024/5/6 15:58

__float128 的精度比 double 低吗?

下面是代码:

#include <bits/stdc++.h>
using namespace std;

const int N=1000 +7;
int n,m;
double f[N][N];
// __float128 f[N][N];

signed main()
{
    cin>>n>>m;
    for(int i=n;i>=0;i--)
    for(int j=m;j>=0;j--)
    {
        if(i!=n || j!=m)
        {
            f[i][j]=(n*m + f[i][j+1]*i*(m-j) + f[i+1][j]*(n-i)*j + f[i+1][j+1]*(n-i)*(m-j) );
            f[i][j]=f[i][j] / (double)(n*m-i*j) ;
            // f[i][j]=f[i][j] / (__float128)(n*m-i*j) ;
        }

    }
    printf("%.11lf\n",(double)f[0][0]);
    return 0;
}

input:

1 1000

output:

double: 7485.4708605504
__float128: 7485.4708605503

python 的输出是 7485.4708605504(与double一样)

python代码如下:

import numpy as np

n, m = map(int, input().split())
f = np.zeros((n + 2, m + 2))

# Initialize the last row and column
f[n,m]=0

# Calculate the values of f in reverse order
for i in range(n, -1, -1):
    for j in range(m, -1, -1):
      if i!=n or j!=m :
        f[i][j] = (
            (n) * (m)
            + f[i][j + 1] * i * ((m) - j)
            + f[i + 1][j] * (n - i) * j
            + f[i + 1][j + 1] * (n - i) * (m - j)
        ) / ((n) * (m) - i * j)

print(f"{f[0][0]:.10f}")
2024/5/6 15:58
加载中...