2

編輯:由於我發現問題,我已經糾正了這個問題。gnuplot:無聲錯誤讀取(非標準形式)科學格式編號

我有一個程序可以爲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。情節有一個意想不到的高峯(見下文)。

sin(x) with spike

解決方案在我的情況:數據轉換爲單精度浮點數或改變雙浮動的可打印表示。

+0

我從來沒有見過這樣的錯誤,請顯示腳本和您正在使用的文件中的原始數據行。 – Christoph

+0

我想我找到了錯誤的地方。該點的數據行看起來像這樣:'3.141592653589793d0 1.2246467991473532d-16' - 所以,double-float數字在最後用'dXXX'格式化。我覺得GNUPlot不能讀取這種形式的數字,需要'eXXX'。所以,如果最後一個數字寫成「1.2246 ... e-16」,那就沒有問題了。 – mobiuseng

+0

@Christoph錯誤確實如上所述。我已經糾正了這個問題。 – mobiuseng

回答

3

該格式也由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 

根據,因爲它減緩了輸入過程中該選項默認不啓用文檔。