gnuplot:无声错误读取(非标准形式)科学格式数字

gnuplot: silent error reading (non-standard form of) scientific format numbers

编辑: 因为我发现了问题,所以我已经更正了问题。

我有一个程序可以生成数据供 GNUPlot 绘图。一切正常,除了一件事:程序生成的数据是双浮点格式,并且此数据的可打印表示形式是,例如 1.2d06.3d-5(Common Lisp 的标准表示形式)。

然而,

GNUPlot 需要 1.26.3e-5 形式的数字。也许,GNUPlot 可能会在读取数据时发出警告,但由于所有数据都通过管道传输,因此不会显示。所以,发生了什么:GNUPlot 愉快地读取数字,直到它遇到 dXXX 后缀并静静地丢弃它。这导致了一些意想不到的事情。例如,要从程序中绘制 y=sin(x)x=pi 附近的数据线如下所示

2.9670597283903604d0 0.17364817766693028d0
3.141592653589793d0 1.2246467991473532d-16
3.3161255787892263d0 -0.17364817766693047d0

因此,对于 x=3.14159...,GNUPlot 读取 y=1.2246... 而不是 y=1.2246...e-16。情节有一个意想不到的尖峰(见下文)。

我的解决方案:将数据转换为单浮点数或更改双浮点数的可打印表示形式。

Fortran 也使用该格式。 Gnuplot 提供了一个选项来启用检查数据文件中的 DQ 常量:

set datafile fortran

plot '-' using 1:2 w lp
2.9670597283903604d0 0.17364817766693028d0
3.141592653589793d0 1.2246467991473532d-16
3.3161255787892263d0 -0.17364817766693047d0
e

根据文档,默认情况下未启用该选项,因为它会减慢输入过程。