setjmp/longjmp и локальные переменные

Я думаю, что Вы ищете, RGB-> формула Luma преобразования.

Фотометрический/цифровой ITU, Купленный 709 :

Y = 0.2126 R + 0.7152 G + 0.0722 B

Цифровой ITU, Купленный 601 (дает больше веса R и компонентам B):

Y = 0.299 R + 0.587 G + 0.114 B

, Если Вы готовы обменять точность на производительность, существует две формулы приближения для этого:

Y = 0.33 R + 0.5 G + 0.16 B

Y = 0.375 R + 0.5 G + 0.125 B

Они могут быть вычислены быстро как [1 111]

Y = (R+R+B+G+G+G)/6

Y = (R+R+R+B+G+G+G+G)>>3

22
задан Curd 8 September 2009 в 11:21
поделиться

2 ответа

Интерпретация 1 верна. Если бы Интерпретация 2 была задумана, в исходном тексте использовалось бы « или , которые были изменены» вместо «и».

12
ответ дан 29 November 2019 в 04:50
поделиться

setjmp / longjmp реализуется путем сохранения регистров (включая указатели стека, кода и т. Д.) При первом прохождении и их восстановления при переходе.

Автоматически (также «локально», с выделением в стеке) ) переменные, которые не являются «изменчивыми» , могут храниться в регистрах, а не в стеке.

В этих обстоятельствах longjmp восстановит эти регистровые переменные до их значений в момент, когда setjmp () был впервые вызван.

Кроме того, особенно умный компилятор может избегать переменных, которые могут быть выведены из состояния другой переменной, и вычислять их по запросу.

Однако, если переменная является автоматической, но не имеет регистр, его можно изменить с помощью кода между setjmp и longjmp ..

Volatile явно указывает компилятору не хранить переменную в регистре.

Поэтому, если вы явно не указали, что переменная является изменчивой, если вы изменили переменную между setjmp / longjmp, ее значение будет зависеть от выбора компилятор делает, и поэтому вы не должны полагаться на него («неопределенный»).

27
ответ дан 29 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: