Floating Point vs Long Long Integer

Jan 27, 2012 15:07


Добрый день!

У меня несколько теоретический и потому несколько праздый вопрос.

Известный уже пример, что 5/2=2.5, а в целочисленной арифметике = 2, и ошибка в 0.5 по отношению к 2 есть 25% -- этот пример, конечно, впечатляет, но только если человек работает в 8 битной картинке. Если файл 16-битный, ФШ отображает _номинальное_ значение, скажем, те же ( Read more... )

rpp technical, q&a

Leave a comment

andreybvorobyov January 30 2012, 11:51:00 UTC
>На самом деле главная "плюшка" у RPP сейчас кроется в его уникальных цветовых профилях

"Плюшку" оценил, хотя далеко не все профили мне нравятся (k64 отлично, tc4 после войны с зеленью тоже часто очень хорошо). И собственный механизм профилирования дает намного более лучшие результаты, чем связка ARC + DNG из ColorCheckerPassport (уж не знаю, кто их этой пары более виновен). Надо будет еще посравнивать с результатами icc-профилей, строимых ProfileMaker'ом, особенно для нестандартных источников света, типа этих энергосберегающих ламп, всем нам впаренных...
Режим Half оценил :) когда достаточно небольшого размера и можно не связываться с какой-либо интерполяцией вообще.
Что до теней, то разница мне менее заметна; пожалуй, соглашусь, что RPP дает более чистые тени. На мониторе это заметно иногда больше, иногда меньше. На печати пока не оценил; возможно, я редко тяну тени, возможно мало опыта с RPP (около 2 месяцев, и не очень регулярно).
Но это на "субъективном" уровне, "вижу- не вижу."

На "логическом" был пока только один аргумент: накапливание ошибок в промежуточных вычислениях. -- Согласен вполне; зависит, конечно, что за вычисления. Могу сам добавить, что в цветовых каналах Lab значения кучкуются недалеко от нуля, и там ошибки целочисленных вычислений могут быть более весомыми (хотя цвет не так информативен, как яркость).

Но пока никто не оценил (на логическом уровне), сколько надо грубой силы (разрядности целых), чтобы свести на нет преимущества плавающей точки. А отсюда могу последовать вполне практические выводы: например, если 32 бит достаточно, то можно сделать еще один буфер (в програмистском смысле), еще один "слой" с результатом, получаемым по целочисленной арифметике 32-битных целых, и он будет работать быстро. При Apply (и при сохранении) можно выдавать на эран содержимое честно посчитанного по floating point "слоя", а при предварительной игре с параметрами можно наблюдать все это дело в реальном времени, совсем как в других разгильдяйских конверторах ;) При подготовке цветного результата и некотором опыте это не очень важно, научаешься примерно чувствовать, куда надо двигаться и как туда попасть за несколько шагов, но вот при подготовке черно-белого изображения инструментом является смена цвета под очернобеливанием (а в ACR, между прочим, еще и черноватая магия игры 8 каналами), и тут что-то предсказать крайне трудно, нужен метод тыка, а тыкать хорошо бы быстро.

Reply

alex_skill January 30 2012, 17:32:23 UTC
> Но пока никто не оценил (на логическом уровне), сколько надо грубой силы (разрядности целых), чтобы свести на нет преимущества плавающей точки.

Видно, что вы не совсем понимаете, что такое представление числа в формате с плавающей точкой. :)
Дело в том, что арифметически логические устройства в процессорах всегда оперируют целыми числами, а именно 0 и 1, которые называются битами. Из этих грубо говоря "атомов" булевой логики строится вся система.
Поэтому число с плавающей точкой в компьютерном представлении - это такой же набор битов, как и у какого-нибудь целого числа, только рассматриваются они процессором по-разному.

В чём же тогда разница между целым числом и числом с плавающей точкой?
А разница (если говорить применительно к точности вычислений с этими числами) как раз и заключается в количестве битов, которые используются для задания этих чисел и в трактовке этих битов.
Так для представления числа с плавающей точкой типа (float) используются 32 бита, о которых тут не один раз уже упоминали. Бывает правда ещё и более точное число с плавающей точкой типа (double) для его задания требуется в два раза больше битов, а именно 64 бита, и ещё более точные тоже бывают. ;)

Reply

andreybvorobyov January 31 2012, 10:06:44 UTC
>Видно, что вы не совсем понимаете, что такое представление числа в формате с плавающей точкой. :)
Нет, Алекс, я это прекрасно понимаю, у меня за плечами лет 20 работы на С/С++, в том числе и для инженерных расчетов :)
В определенных случаях целочисленная арифметика может быть использована для вычислений, которые "по смыслу" надо проводить в плавающей, и точность этого суррогата тем лучше, чем выше разрядность целого. Но может быть и плохо, -- все зависит от того, что за вычисления и какая нужна точность.

Reply

alex_skill January 30 2012, 21:11:37 UTC
И ещё следует уточнить. Не нужно идеализировать формат представления числа с плавающей точкой, у него тоже есть склонность к внесению погрешности и степень этой погрешности напрямую зависит от количества бит, примененных для кодирования числа. Чем меньше бит, тем больше вероятность появления погрешности в расчётах.

Сейчас специально почитал о числах с плавающей точкой, чтобы освежить в памяти старые знания и попалась на глаза забавная фраза: "В научных расчётах, в общем, всё равно, как выглядит 0.1, а в бухгалтерских числа с плавающей запятой обычно не используют - тут погрешность денег стоит…" :)

Reply


Leave a comment

Up