【发布时间】: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 错误确实如上所说。我已更正问题以反映这一点。
标签: gnuplot precision scatter-plot linechart scientific-notation