|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
Почему битовые операции нельзя применять к переменной с плавающей точкой?12.05.2023, 17:36. Показов 3460. Ответов 52
Метки нет (Все метки)
Здравствуйте,
Собственно сам вопрос: почему битовые операции нельзя применять к переменной с плавающей точкой типа float и double ? То есть я понимаю, что double и float - это не целые числа и изменение бит не отображается "прямолинейно" на самом интерпретируемом значении хранящемся в double и float, но тут вопрос, не в этом, а в том, что за это отвечает программист и если он что то не так сдвинул и тому подобное, то это проблемы программиста. Ведь в С и С++ никто не запрещает писать за пределы своей выделенной памяти, почему же тут на запрет битовый операций ? Или есть какой то "технический" момент ну там "труднореализуемый" ?
0
|
|
| 12.05.2023, 17:36 | |
|
Ответы с готовыми решениями:
52
Ошибка операции с плавающей точкой арифметические операции с плавающей точкой Арифметические операции с числами с плавающей точкой |
|
фрилансер
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
|
||
| 13.05.2023, 09:30 | ||
|
Они надеются на грамотность программиста - что он уже обеспечил этот невыход за край
0
|
||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||
| 13.05.2023, 09:35 [ТС] | ||
|
Почему в одном случае "надеются на грамотность программиста", а в другом это не нужно, потому что программист не справится с форматом значения с плавающей точкой ?
0
|
||
|
фрилансер
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
|
|||
| 13.05.2023, 09:43 | |||
|
Добавлено через 1 минуту memcpy, затем спокойно ковыряй биты После этого можешь скопировать обратно при помощи опять же memcpy.Добавлено через 1 минуту кстати, в итоговом коде (после оптимизации) не будет вызова функции memcpy, будет обычное копирование, как это происходит в выражении навроде a=b.Только при этом не будет UB, как при реинтерпретации через указатели или union
0
|
|||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||
| 13.05.2023, 10:22 [ТС] | ||
|
То есть придется по сути бессмысленно два раза копировать память.
0
|
||
|
Комп_Оратор)
|
|||
| 13.05.2023, 11:05 | |||
Всего доброго.
0
|
|||
|
фрилансер
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
|
||
| 13.05.2023, 11:12 | ||
0
|
||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|||
| 13.05.2023, 11:17 [ТС] | |||
|
Добавлено через 1 минуту Вам же когда нужен сдвиг в int - вы же не делаете это бессмысленное копирование.
0
|
|||
|
фрилансер
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
|
|||
| 13.05.2023, 11:36 | |||
~, |, & ^). Вот бы зажили Но, не судьба.Попробуй отправить предложение в комитет стандартизации
0
|
|||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||
| 13.05.2023, 11:46 [ТС] | ||
|
Для преобразования Кодировки UTF-16 в UTF-8 и наоборот. Или для создания маски для последующего "копирования" бит из одной переменной в другую. Да мало ли где еще. Битовые операции точно не лишние в языках.
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 13.05.2023, 12:21 | ||
|
Optimus11, все эти примеры гораздо лучше реализуются на беззнаковом множестве, чем на знаковом. По этой причине он и пишет, что на знаковом числе сдвиг не применял: это закономерно, потому что например сдвиг вправо на отрицательном числе - это implementation-defined behaviour, а сдвиг влево за знаковый бит - это undefined behavior. Так что техническая реализация использующая сдвиги на знаковых числах должна быть крайне аккуратно написана и совершенно не подходит, когда нужен весь диапазон разрядной сетки, как в ваших примерах.
Добавлено через 14 минут Проще говоря, если за углом не стоит ДПС-ник и не смотрит как вы перебегаете дорогу в неположенном месте, это не означает, что вы совершаете правомерное действие. По этой же причине существует UB для сдвига знаковых отрицательных чисел. Потому что не всегда это возможно проконтролировать без привлечения дополнительных затрат. Поэтому запрет есть, но обязательная диагностика запрета не требуется. В случае же с вашим вопросом все определено на этапе компиляции - поэтому контроль за этим может быть явным.
1
|
||
|
фрилансер
6495 / 5724 / 1133
Регистрация: 11.10.2019
Сообщений: 15,286
|
|
| 13.05.2023, 12:29 | |
|
Optimus11, я вручную кодировки не перегоняю, для этого предоставляет функции ОС или фреймворк
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 13.05.2023, 12:29 | ||
|
Если начнут добавлять такие проверки, то это приведет к тому, что C++ превратится в C#. Он вынужден будет обзавестись виртуальной машиной, с помощью которой станет возможно контролировать память и другие аспекты.
0
|
||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
| 13.05.2023, 12:40 [ТС] | |
|
0
|
|
| 13.05.2023, 15:53 | ||
|
Не по теме:
0
|
||
|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
||
| 13.05.2023, 23:37 [ТС] | ||
|
Не по теме:
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 13.05.2023, 23:47 | ||
0 и 1, фигурирующие в записи числа в позиционной системе счисления с основанием 2. С точки зрения языка эти биты в не имеют никакого отношения к битам памяти в двоичном компьтере. Все битовые операции в языка С и С++ - это операции над воображаемой записью числа в позиционной системе счисления с основанием 2.Для целых чисел стандарт языка открытым текстом говорит, что за запись имеется в виду, то есть с какими "битами" мы имеем дело. А о каких "битах" вы ведете речь вообще в случае плавающих чисел? Откуда они возьмутся? Стандарт не вводит понятия "записи числа в позиционной системе счисления с основанием 2" для плавающих чисел. Сделано (точнее, не сделано) это по вполне понятным причинам: представления плавающих чисел весьма нетривиальны и никаких веских причин опираться на основание 2 для таких представлений нет. Да и пользы от стандартизации такого воображамого представления - никакой. Поэтому и не существует никаких "битов" в плавающих числах.
3
|
||
|
Супер-модератор
|
||
| 13.05.2023, 23:52 | ||
|
"А дьявола тоже нет? – вдруг весело осведомился больной у Ивана Николаевича. – И дьявола… – Не противоречь! – одними губами шепнул Берлиоз, обрушиваясь за спину профессора и гримасничая. – Нету никакого дьявола! – растерявшись от всей этой муры, вскричал Иван Николаевич не то, что нужно, – вот наказание! Перестаньте вы психовать! Тут безумный расхохотался так, что из липы над головами сидящих выпорхнул воробей. – Ну, уж это положительно интересно, – трясясь от хохота, проговорил профессор, – что же это у вас, чего ни хватишься, ничего нет!" М.А. Булгаков М&М
1
|
||
|
Комп_Оратор)
|
||
| 14.05.2023, 01:35 | ||
|
Catstail, да, - они там, и правда, - двоичные. И мантиссы и экспоненты. А упряжь по формату. ![]() Но верно то, что беззнаковое целое в двоичном формате это таки двоичный формат целого числа, а плавающее это наложении как минимум, двух форматов - двоичного представления мантиссы, двоичного представления экспоненты, (1 формат) и способ их упаковки в одну запись - (2-й формат). А есть ещё и разные виды нормализации мантисс (если правильно помню). Так что, строго говоря, плавающее это не двоичное число, а некий набор двоичных чисел. И виной всему упаковка и с применением экспоненты. Без неё любое плавающее можно было бы представить как целое, но длина записи не помещалась бы ни в какие разумные рамки. Но тогда, можно было бы говорить о двоичных операциях. Я считаю, что формат это ключевое слово. А формат (даже если отвлечься от платормозависимости), не даёт каких-то разумных резонов в пользу того, что бы что-то сдвигать или ещё как-то побитово логически устанавливать. Если бы такие нашлись, - другое дело. Был бы смысл поднимать вопрос.
0
|
||
|
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,218
|
|
| 14.05.2023, 01:47 | |
|
Какие проблемы?
Хошь сдвигай, хошь не сдвигай. Лишь бы с крышею беды не было...
0
|
|
| 14.05.2023, 01:47 | |
|
Освещение. ошибка операции с плавающей точкой Арифметические операции для чисел с плавающей точкой Когда нельзя применять метод наложения и почему? Арифметические операции над числами в формате с плавающей точкой Метод выводит не то, что нужно операции с плавающей точкой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|