@JSlang

Страница 2053 из 2237
Yura
22.07.2018
21:40:32
Нет Урезание это удаление всех битов старше 32го В чем смысл этой операции мне пока непонятно

Sviat
22.07.2018
21:42:19
Ок

Просто - 2 ** 32 даёт тот же результат что и << 0

Yura
22.07.2018
21:46:22
А откуда ты эту операцию взял?

Google
Sviat
22.07.2018
21:46:32
Конкретно

<< 0?

Yura
22.07.2018
21:46:42
-2^32

Sviat
22.07.2018
21:46:54
-2^32
Подсказали питонщики

Yura
22.07.2018
21:47:49
А если увеличить число в 10 раз результат тоже будет совпадать

?

Sviat
22.07.2018
21:48:04
Надо тестировать

Я не уверен что это 100% верное решение

Как минимум если число будет 0, то его сделают -4млрд

Короче, вот то число на скрине - красный цвет

Там где большое число, это выхлоп из сдвига argb Нужно перевести это число, в то, что js возвращает при << 0, но на питоне Потому что корректное значение для красного цвета -65536

В данном случае сработало простое вычитание... Но как бы это сделать правильно... Как вариант, перевести в строку битов и обрезать её до длины 32. Но я не уверен что это правильно

Oleg
22.07.2018
21:53:18
Просто - 2 ** 32 даёт тот же результат что и << 0
Да почитай ты спеку уже, я тебе же всё скинул сравни даже 4294967296 * 3 - Math.pow(2, 32) и 4294967296 * 3 << 0

Google
Yura
22.07.2018
21:55:11
ану кинь скрин где это в спеке

Sviat
22.07.2018
21:55:37
Почти

if i > 2 ** 31: i -= 2 ** 32

ану кинь скрин где это в спеке
http://www.ecma-international.org/ecma-262/5.1/#sec-9.5

Роман
22.07.2018
21:56:43
Какой смысл в сдвигах? Компилятор сам оптимизирует эти операции, лучше использовать очевидные команды. Нужно возвести в степень - возводи, не нужно использовать сдвиги.

Yura
22.07.2018
21:56:52
блять

Sviat
22.07.2018
21:58:27
Нахер math pow когда 2 ** 32 работает?

Oleg
22.07.2018
21:58:42
и? я не понимаю что ты от меня хочешь. я и говорю, что это не просто вычитание 2**32

Yura
22.07.2018
21:58:56


Sviat
22.07.2018
22:00:06
Почему ты умножаешь на три

Yura
22.07.2018
22:00:49
Нахер math pow когда 2 ** 32 работает?
короче если ты почитаешь внимательней то там сначала округляют до инт32 а дальше вычитают для округления до интт32 в пайтоне должны быть отдельные функции

Почему ты умножаешь на три
хочу доказать что - 2**32 и << не одно и тоже

Oleg
22.07.2018
22:01:15
Почему ты умножаешь на три
просто чтобы показать, что при больших числах твоя формула не сработает так, как <<

Google
Yura
22.07.2018
22:01:19
а просто совпаение в твоем случае

Sviat
22.07.2018
22:11:13
а просто совпаение в твоем случае
4294901760 * 3 - 2 ** 32 * Math.ceil(4294901760 * 3 / 2 ** 32)

Теперь верно в любом случае

Кроме случая если число меньше 2 ** 32

Yura
22.07.2018
22:12:46
так это по сути и есть приведение до инт32, когда ты делишь на 2**32

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

Sviat
22.07.2018
22:13:58
Конечно лучше. Знать бы еще как они называются, или хотя бы как это гуглить

int 32 python дает вообще головокружительные ответы

Yura
22.07.2018
22:15:06
а с какого типа ты приводить хочешь? как тебе данные придут, строкой?

Sviat
22.07.2018
22:16:24
а с какого типа ты приводить хочешь? как тебе данные придут, строкой?
Данные у меня изначально в массиве, типа [255, 255, 255, 255] Массив [255, 0, 0, 255] переводится в int 4294901760

сдвигами

но 4294901760 не валидное значение для цвета.

Yura
22.07.2018
22:18:02
понял

щас придумаем

Sviat
22.07.2018
22:19:05
когда же тг научится ограничивать длину ника...

Yura
22.07.2018
22:26:04
А ты уверен что тебе нужно именно rgba а не rgb? потому что ргба это не только цвет но и альфа канал, что часто выносять в отдельное свойство от цвета

Sviat
22.07.2018
22:26:12
там если даже альфа не указана, в либе ее специально дописывают

И потом - 65*** корректно распознается, значит все правильно

Google
Yura
22.07.2018
22:27:35
а либа пайтоновская? или джс?

да, распознается, но тот ли это цвет

и задействован ли там альфа канал

Sviat
22.07.2018
22:28:01
тот
255, 0, 0, 255 это красный



Admin
ERROR: S client not available

Sviat
22.07.2018
22:29:56
и задействован ли там альфа канал
но может ты и прав, и альфа там не обязательна

завтра протестирую

Yura
22.07.2018
22:30:53
я знаю что тебе нужно делать но не знаю как тебе нужно превратить беззнаковый тип в знаковый

Sviat
22.07.2018
22:31:19
def RGBAToRGBInt(RGBA): i = int((RGBA[3] << 24) + (RGBA[0] << 16) + (RGBA[1] << 8) + RGBA[2]) if i > 2 ** 31: i = i - 2 ** 32 * math.ceil(i / 2 ** 32) return i

Yura
22.07.2018
22:32:06
ну в принципе рабочая схема, в твоем случае подходит

Sviat
22.07.2018
22:34:49
но я пока не уверен что писать в if, ** 32 или **31

Yura
22.07.2018
22:34:59
31

больше 32 в принципе не должно получатся

Sviat
22.07.2018
22:35:22
ок, поверим)

Yura
22.07.2018
22:35:54
ок, поверим)
ну просто максимальное возможное зачение в твоем случае это и будет 2**32

Denis
22.07.2018
22:36:29


Google
Denis
22.07.2018
22:36:35
Ошибку получаю: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

Но как их успеть отправить-то :) если запросы асинхронные

Sviat
22.07.2018
22:37:25
ну просто максимальное возможное зачение в твоем случае это и будет 2**32
Ну тогда нах они вообще замутили с этими преобразованиями?

А понял, в инт еще есть 50% отрицательных значений

Роман
22.07.2018
22:39:15
Если ты не завершишь соединение, то с чего "респонсу закрываться"?

Ошибку получаю: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
Ты уже отправил заголовки и пытаешься установить их снова.

Yura
22.07.2018
22:39:53
Ну тогда нах они вообще замутили с этими преобразованиями?
смотри, там когда отнимали 2**32 происходило преобразование беззнакового в знаковое, тоесть Если число больше 2**31 то значит что старший бит равен 1 значит при преведении к знаковому типу это будет отрицательное число

Sviat
22.07.2018
22:40:41
да, только сейчас дошло что есть знаковое

спасибо народ

Denis
22.07.2018
22:41:10
Точно, блин :) Спасибо! Я не думал, что res.send() перед этим закроет запрос, думал закроет только res.end() :) Убрал тестовый send перед этим и сработало.

Если ты не завершишь соединение, то с чего "респонсу закрываться"?

Ты уже отправил заголовки и пытаешься установить их снова.

Роман
22.07.2018
22:41:15
Откуда вы это взяли? Ничто никуда само не преобразуется.

Все числа в JavaScript, как целые так и дробные, имеют тип Number и хранятся в 64-битном формате IEEE-754, также известном как «double precision».

Yura
22.07.2018
22:41:46
мы уже все выяснили, все по спеке

Роман
22.07.2018
22:44:54
Число не может взять и преобразоваться само по себе в знаковое или беззнаковое. Покажи что вы там выяснили. Мне кажется вы просто вычитание делаете.

От того что ты из числа, большего 2^32 вычел 2^32, оно не стало от этого другой разрядности.

Страница 2053 из 2237