Добавление в условное построение в силах Gnuplot "На этом графике нет данных, пригодных для автоматического масштабирования диапазона оси" - PullRequest
0 голосов
/ 11 сентября 2018

Я использую простой код для создания серии изображений из одного файла, в зависимости от условий. При этом я понял, что:

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

1 Ответ

0 голосов
/ 11 сентября 2018

Арифметика с плавающей точкой на компьютере не является точной.Например, 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)

должно работать.

...