if-statement - 在 Gnuplot 中添加条件绘图强制“此图中没有可用数据自动缩放轴范围”
问题描述
我使用一个简单的代码从一个文件创建一系列图像,具体取决于条件。这样做的时候我意识到:
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 不完全相同。有关详细信息,请查看以下问题:浮点数学是否损坏?
您通常希望避免测试浮点数的严格相等性。相反,您可以测试两个数字是否足够接近。例如,
eps = 1E-10
splot [1:150][1:150][] "dinozaur" u 5:6:((abs($4 - (0.4+0.0025*3)) < eps) ? $2 : 1/0)
应该管用。
推荐阅读
- scala - 在本地分发中运行 spark.read.csv("...") 需要哪些依赖项?
- c# - .NET MySql ArgumentNullException 在 GetCustomAttributes 中打开
- angular - RxJS 从发出的 observable 中获取值
- ios - 如果 UIPasteboard.general.string 返回 nil,为什么 UIPasteboard.general.string?.append("another") 会崩溃?
- postgresql - 完全升级后新安装 Kali Linux 时出现 Armitage 'Connection denied' 错误
- php - 爆炸 Foreach
- python - 使用 SCIP 进行分支定价
- ios - iOS 推送通知可以通过基于证书的连接发送,但基于令牌的连接返回 DeviceTokenNotForTopic
- c++ - C++:相对 --> 绝对 URL 路径
- css - 尝试设置 body.margin css 时看到奇怪的行为