gnuplot 4.6和gnuplot 5.0之间迭代的原因不明

时间:2016-01-25 22:34:11

标签: iteration gnuplot

在尝试回答涉及需要迭代日期的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输出被切换,它将几乎)。

为什么这些版本的版本表现不同?任何对发行说明中的​​更改或源代码更改的引用都将不胜感激。

1 个答案:

答案 0 :(得分:2)

看起来我自己找到了答案。这显然是gnuplot中出现的一个错误,并在5.0版本中得到修复。

实际错误在gnuplot错误报告中报告为错误编号1429,其描述大致相当于我的描述,以及1358中修复的更详细说明。

这在版本5.0rc1和版本4.6补丁级别6中得到修复。

我不会在这里重复源代码,因为我不知道许可限制,但 next_iteration中的文件 parse.c 发生了变化 function,其中添加了一个补丁以防止由于将两个大数相乘而导致的溢出(并且至少在另一个地方显然需要类似的补丁)。