我使用一个简单的代码从一个文件创建一系列图像,具体取决于条件。这样做的同时我意识到:
splot [1:150][1:150][] "dinozaur" u 5:6:(($4==0.4+0.0025*3)?$2:1/0)
......不起作用但是:
splot [1:150][1:150][] "dinozaur" u 5:6:(($4==0.40750)?$2:1/0)
...作品。
但是,两者都有
splot [1:150][1:150][] "dinozaur" u 5:6:(($4==0.5+0.0025*3)?$2:1/0)
...和
splot [1:150][1:150][] "dinozaur" u 5:6:(($4==0.50750)?$2:1/0)
工作。
如果我收到错误,那就是标题中的错误。我正在做一些明显的错误吗?
我附上一个数据文件片段,第4列的值为0.40750 https://www.dropbox.com/s/lpv0m2wfoo3qwl7/dinozaur?dl=0
计算机上的浮点运算并不精确。例如,0.4 + 0.0025 * 3可能与0.40750不完全相同。有关详细信息,请查看此问题:Is floating point math broken?
您通常希望避免测试浮点数以获得严格的相等性。相反,你可以测试两个数字是否足够接近。例如,
eps = 1E-10
splot [1:150][1:150][] "dinozaur" u 5:6:((abs($4 - (0.4+0.0025*3)) < eps) ? $2 : 1/0)
应该管用。