在尝试回答涉及需要迭代日期的gnuplot问题时,我被告知我的解决方案并不适用于gnuplot 4.6。在调查原因时,我注意到gnuplot 4.6和gnuplot 5.0如何处理相同的迭代构造有一个奇怪的区别。
考虑这两个迭代表达式
do for [i=396835200:397094400:86400] {print i}
do for [i=396835200:397008000:86400] {print i}
在gnuplot 5.0中,第一个产生
396835200
396921600
397008000
397094400
,第二个产生
396835200
396921600
397008000
但是在gnuplot 4.6中,第一个只生成前两个数字,第二个生成一个额外的数字(397094400)。
为什么会这样?根据gnuplot中迭代的定义,gnuplot 5.0的行为是正确的。是否有在gnuplot 5.0中修复的错误?
我怀疑它可能与整数溢出有关,但我不认为这些数字足以触发它(它们都很容易适合32位有符号整数)。
我还怀疑迭代可能发生了变化,因此使用<来检查上限。在版本4.6和< =版本5.0中,但仍然无法解释这一点(如果这些表达式的4.6输出被切换,它将几乎)。
为什么这些版本的版本表现不同?任何对发行说明中的更改或源代码更改的引用都将不胜感激。