gpt4 book ai didi

c - 以 18 位以上的精度将 CSV 读入 C 中的网格

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:44 24 4
gpt4 key购买 nike

我有一个名为“Q.csv”的文件,它是一个包含以下内容的文本文件:

-4.999118817962964961e-07 1.500000000000000197e-08 9.151794806638024753e-08 9.151794806638024753e-08

我想将其作为 2x2 矩阵读入 C 程序。目前我的程序看起来像这样。

 #include <stdio.h>
#include <stdlib.h>
int main(){
FILE* inf;
inf = fopen("Q.csv","r");
int nrows = 2;
int ncols = 2;
double grid[nrows][ncols];
double t;
size_t x, y;
for (x=0; x<ncols; ++x){
for(y=0; y< nrows; ++y){
fscanf(inf,"%lg ",&t);
grid[x][y]=t;
printf("%lg\n",grid[x][y]);
}
}
fclose(inf);
}

这个程序有效。但它并没有输出最初在 Q.csv 中的所有精度 - 例如,它输出第一个数字为 -4.99912e-07。例如,如果我拿走 %lg 并将其更改为 %.18g,它会输出错误的内容。如果我放 %.18lg 也一样。事实上,这两者都会导致神秘数字 4.94065645841246544e-324 重复(这是从哪里来的?!)

我怎样做才能将文件中的所有精度转换为 C?

最佳答案

将使用 fscanf(inf,"%lg ",&t); 尽可能地读取输入。

要打印出小数点后 18 位数字,请使用

 printf("%.*le\n",18, grid[x][y]);

如果 double 具有足够的精度,请检查值 DBL_DIG 必须至少为 10。我怀疑 double 仅适用于 15-共 17 位。


要获得所有 精度,请参阅Printf width specifier to maintain precision of floating-point value

关于c - 以 18 位以上的精度将 CSV 读入 C 中的网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34142674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com