gnuplot:静默错误读取(非标准形式的)科学格式数字

gnuplot:静默错误读取(非标准形式的)科学格式数字,gnuplot,precision,scatter-plot,linechart,scientific-notation,Gnuplot,Precision,Scatter Plot,Linechart,Scientific Notation,编辑:自从我发现问题以来,我已经更正了问题 我有一个程序,可以为GNUPlot生成数据进行绘图。一切正常,除了一件事:程序生成的数据是双浮点格式,该数据的可打印表示形式是,例如1.2d0或6.3d-5(通用Lisp的标准表示形式) 然而,GNUPlot希望数字的格式为1.2或6.3e-5。也许,GNUPlot在读取数据时可能会发出警告,但由于所有数据都是通过管道传输的,因此它不会显示。所以,发生了什么:GNUPlot愉快地读取数字,直到遇到dXXX后缀,然后默默地丢弃它。这导致了一些意想不到的事

编辑:自从我发现问题以来,我已经更正了问题

我有一个程序,可以为GNUPlot生成数据进行绘图。一切正常,除了一件事:程序生成的数据是双浮点格式,该数据的可打印表示形式是,例如
1.2d0
6.3d-5
(通用Lisp的标准表示形式)

然而,GNUPlot希望数字的格式为
1.2
6.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提供了一个选项来启用数据文件中
D
Q
常量的检查:

set datafile fortran

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

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

我从未见过这样的错误,请显示您正在使用的文件中的脚本和原始数据行。我想我找到了错误所在的位置。该点的数据行如下所示
3.141592653589793d0 1.2246467991473532d-16
——因此,双浮点数的格式为结尾处的
dXXX
。我觉得GNUPlot无法读取此表单中的数字,需要
eXXX
。因此,如果最后一个数字是写的
1.2246…e-16
,就不会有问题了。@Christoph错误确实如上所述。我已更正问题以反映这一点。