Spec-Zone.ru › Octave 9

Предыдущий: Отображение с помощью аппаратных и программных средств, Вверх: Наборы инструментов для графики [Оглавление][Индекс]

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.

precisiondate

Рисунок 15.8: Проблемы одинарной точности с наборами инструментов OpenGL для графики

Аналогично, другие данные можно перевести или перемасштабировать, чтобы обойти эту проблему.

Предыдущий: Отображение с помощью аппаратных и программных средств, Вверх: Наборы инструментов для графики [Оглавление][Индекс]

© 1996–2023 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.2.0/Precision-issues.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API