【问题标题】:Reading variable with double float precision from a text file with gnuplot使用 gnuplot 从文本文件中读取具有双浮点精度的变量
【发布时间】:2014-06-04 15:22:34
【问题描述】:

我有一个文本文件,其中包含 3 列中的数据,如下所示:

0.0100000000 0.0058077299 -0.0000000288
0.0110000000 0.0075128707 -0.0000000373
0.0120000000 0.0093579693 -0.0000000465

我想在 gnuplot 中从这个文件中获取变量并用它们来绘制图形:

我所做的是如下所示(例如:从第 2 行第 3 列中选择变量):

ii  = 2
a_0 = system("awk '{ if (NR == " . ii . ") printf \"%f\", $3}' " .datafile)
a_0 = a_0+0.

但是写成 a_0 的东西是零!

如何提高精度以获得准确值?

【问题讨论】:

  • 如何打印a_0?使用sprintfgprintf 等格式化打印命令可能会有所帮助。

标签: awk gnuplot


【解决方案1】:

这里的问题是指示 awk 读取数字的显式方式。当精度被排除在格式说明符%.6f 之外时,awk 返回0.000000 作为第二行第三列中的数字。您可以通过多种方式解决此问题:

  1. 使用更高精度的格式说明符:

    a_0 = system("awk 'NR == ".ii." { printf \"%.10f\", $3 }' ".datafile)

    注意,awk 中每个代码块的头部隐含一个布尔表达式,所以这里的 if 语句是多余的。

  2. 完全避免在 awk 中进行数值转换:

    a_0 = system("awk 'NR == ".ii." { print $3 }' ".datafile)

  3. 通过设置OFMT使用更高精度的转换:

    a_0 = system("awk 'NR == ".ii." { print 0+$3 }' OFMT='%.10f' ".datafile)

    关于 awk 中数值转换的进一步讨论可以在 this answer 中看到,我给出了一个类似的问题。

在脚本末尾运行print a_0的结果在所有情况下都是:

-3.73e-08

【讨论】:

  • 完美,我尝试了第一个解决方案,它有效。谢谢
猜你喜欢
  • 2011-05-09
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多