gnuplot:静默错误读取(非标准形式)科学格式数字
Posted
技术标签:
【中文标题】gnuplot:静默错误读取(非标准形式)科学格式数字【英文标题】:gnuplot: silent error reading (non-standard form of) scientific format numbers 【发布时间】:2016-01-22 09:50:28 【问题描述】:编辑:因为我发现了问题,所以我已经更正了问题。
我有一个程序可以为 GNUPlot 生成数据以进行绘图。一切正常,除了一件事:程序生成的数据是双浮点格式,并且该数据的可打印表示形式是 1.2d0
或 6.3d-5
(Common 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
。并且情节出现了意外的峰值(见下文)。
在我的情况下的解决方案:将数据转换为单浮点数或更改双浮点数的可打印表示。
【问题讨论】:
我从未见过这样的错误,请在您正在使用的文件中显示脚本和原始数据行。 我想我找到了错误所在。该点的数据行看起来像这样3.141592653589793d0 1.2246467991473532d-16
——所以,双浮点数最后用dXXX
格式化。感觉GNUPlot无法读取这种形式的数字,需要eXXX
。所以如果最后一个数字写成1.2246...e-16
就没有问题了。
@Christoph 错误确实如上所说。我已更正问题以反映这一点。
【参考方案1】:
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
根据文档,该选项默认不启用,因为它会减慢输入过程。
【讨论】:
以上是关于gnuplot:静默错误读取(非标准形式)科学格式数字的主要内容,如果未能解决你的问题,请参考以下文章