15.4.8.3 Проблемы точности
Графические инструментарии OpenGL ("qt" и "fltk") используют одинарную точность при отрисовке. Это ограничение особенно касается графиков временных рядов относительно последовательных дат, используемых функциями datenum, datestr, datestruct и datetick.
Последовательные даты кодируют временные метки как количество дней, прошедших с нулевого года, а часы, минуты и секунды — как дробную часть. 31 декабря 1999 года последовательная дата имела значение 730485. Переменная двойной точности с такой целой частью обеспечивает разрешение дробной части 1.2e-10, что соответствует примерно 5 микросекундам. Но при одинарной точности разрешение снижается примерно до 0.06, что соответствует 45 минутам. Любая попытка построить график данных с временными метками, имеющих более высокую точность, приведёт к искажению графика.
В качестве обходного решения можно использовать графический инструментарий "gnuplot" или вычесть 2000 лет — то есть datenum (2000, 0, 0) или 730485 — из значений времени. Поскольку календарная структура повторяется каждые 2000 лет, взаимосвязь между годом, месяцем, числом месяца и днём недели останется неизменной, а метки делений и их подписи, созданные функцией datetick, останутся правильными. Только в годах будет отсутствовать цифра тысячелетия. Таким образом, «2020» будет отображаться как «20». Например:
# timestamps of 24 hours in one minute steps
t = datenum (2020, 1, 1):(1/1440):datenum (2020, 1, 2);
# some example time series data
x = -cos (2*pi*t) + rand (size (t)) / 10;
subplot (1, 2, 1);
plot (t, x);
datetick ("x");
xlabel ("serial date");
title ("problem");
subplot (1, 2, 2);
plot (t - 730485, x);
datetick ("x");
xlabel ("2000 years off");
title ("workaround"); Результат показан на рисунке 15.8.
Рисунок 15.8: Проблемы одинарной точности в графических инструментариях OpenGL
Аналогичным образом можно преобразовать или масштабировать другие данные, чтобы обойти эту проблему.
© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/Precision-issues.html