Spec-Zone.ru › Octave 6

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–2022 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/v6.4.0/Precision-issues.html

Spec-Zone.ru

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