|
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
|
|
Почему битовые операции нельзя применять к переменной с плавающей точкой?12.05.2023, 17:36. Показов 3458. Ответов 52
Метки нет (Все метки)
Здравствуйте,
Собственно сам вопрос: почему битовые операции нельзя применять к переменной с плавающей точкой типа float и double ? То есть я понимаю, что double и float - это не целые числа и изменение бит не отображается "прямолинейно" на самом интерпретируемом значении хранящемся в double и float, но тут вопрос, не в этом, а в том, что за это отвечает программист и если он что то не так сдвинул и тому подобное, то это проблемы программиста. Ведь в С и С++ никто не запрещает писать за пределы своей выделенной памяти, почему же тут на запрет битовый операций ? Или есть какой то "технический" момент ну там "труднореализуемый" ?
0
|
|
| 12.05.2023, 17:36 | |
|
Ответы с готовыми решениями:
52
Ошибка операции с плавающей точкой арифметические операции с плавающей точкой Арифметические операции с числами с плавающей точкой |
|
Комп_Оратор)
|
||
| 14.05.2023, 01:55 | ||
|
3
|
||
|
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,218
|
|
| 14.05.2023, 01:59 | |
|
Поэт...
0
|
|
|
Супер-модератор
|
||||||
| 14.05.2023, 08:31 | ||||||
|
IGPIGP, есть такое течение - пуристы. Я бы назвал их "юридическими программистами". Их принцип известен - Fiat iustitia, et pereat mundus. Если в стандарте языка на записано, что числа с плавающей точкой хранятся в двоичном коде (а больше им храниться и не в чем! Не в святом же духе!), пурист будет на полном серьезе утверждать, что числа с плавающей точкой есть "непостижимая сущность", а попытка ее познать - это преступление против нравственности. Между тем, три строчки кода:
Вывод: 3f000000
3
|
||||||
|
Комп_Оратор)
|
||
| 14.05.2023, 09:15 | ||
|
Catstail, числа с плавающей точкой хранятся в многослойном формате. Двоичный это последний слой. Целые же числа имеют двоичный формат как свой естественный формат. Поэтому логические операции над битовым представлением целого числа имеют ясный логический смысл, в то время как у данных операций над двоичным представлением чисел типа double (IEEE-754 + bla-bla-bla) такого смысла не видно.
Если пофилософствовать. То могу нарисовать свою картинку.
А у Дябло не видно такого соответствия. Именно в этом смысле они и не бинарные. Хотя хранятся они в двоичном формате. Любые двоичные операции над представлением, если выполнять их прямолинейно: что вижу то и сдвижу (если о сдвиге говорить), будут, семантически, операциями над целым числом. Однако, связь такого целого числа со значением, представляемого им числа с плавающей точкой, с учётом формата, не столь натуральна как у целых чисел. Она зависит от целого ряда соглашений связанных с технологическими ограничениями. В результате имеем закодированное нечто. Я не говорю, что массив double нельзя спрятать от посторонних глаз от XOR'ив целочисленное представление. С точки чистой криптологии, это возможно. Но во-первых это будут булевы танцы над целыми числами и во-вторых, это не будет иметь ни какого логического смысла связанного с значением хранимых, плавающих. Это потому, что целые - являются булевыми группами, а дяблы, - нет. В любом языке (или почти в любом) есть перечисления, которые отражают то факт, что целые числа позволяют логическое ветвление на множестве более чем Да и Нет. Но я не слышал чтобы такие вещи кому-то вздумалось реализовывать в виде чисел с плавающей точкой.
2
|
||
|
Супер-модератор
|
||
| 14.05.2023, 10:11 | ||
|
IGPIGP, а какой смысл в этих "наворотах" (многослойный формат и т.п.)? Любой тип данных, с которым работает классический компьютер - есть набор битов. Это так или не так? Если не так, то приведите контрпример.
Естественно-научный подход (на котором воспитан я) предлагает упрощать, а не усложнять... И знаете, мне уже немало лет, но этот подход никогда не подводил. Не по теме: Эпиграмма, посвященная известному поэту Леониду Мартынову: Добавлено через 7 минут
1
|
||
|
Комп_Оратор)
|
|||||
| 14.05.2023, 11:07 | |||||
|
Catstail, не ужели на языке С можно безнаказанно отбуллить дяблу. Без преобразований в целочисленное представление, а в натуральном виде? ![]() С какой-то точки зрения (как ни парадоксально) дяблы и пр. не перечислимы. Я имею ввиду тот факт, что в практических расчётах нельзя полагаться на представление так как мы это делаем с целыми. Нужно везде, где есть вариант неустойчивости, юзать святой эпсилон. С ним и перечисления можно было бы сочинить и свичи которые сравнивают дяблы с учётом эпсилон могли бы иметь место. Сделало ли бы это нашу жизнь менее похожей на дурдом? Мой ответ - отнюдь. А поэты... Поэты обострённо чувствуют гармонию. Это позволяет не насиловать естественную плоть камня, а оставить лишь то естественное в нём, что гармонирует с замыслом. Тут переплетаются этика (достоинство замысла) и эстетика (красота выражения замысла в форме поражающей ожидания зрителя). В этом смысле всё естественное красиво (если убрать лишнее). ![]() Я бы перефразировал приведенную вами эпиграмму
1
|
|||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
||
| 14.05.2023, 23:47 | ||
![]() Языкам С и С++ нет никакого дела до "классических компьютеров", что бы этот загадочный термин ни значил. Языки С и С++ не признают того факта, что память в большинстве компьютеров состит из набора битов. Минимальной единицей подразделения хранилища в С и С++ является байт (и, кстати, "байт" в С/С++ тоже определятся по-своему). Как определяется понятие "бита" в С и С++ я уже говорил выше, и повторять не буду (отлистайте свой конспект моих собщений и пречитате еще раз сами). Понятие "бита" в С и С++ определено только для целых типов. Вот и все. Ничего непонятного в этом нет.
1
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
|
|
| 15.05.2023, 05:56 | |
|
Если бы языки С и С++ с завтрашнего дня (например) инкорпорировали в себя стандарт IEEE754 и обявили его "единственно верным" способом бинарной нотации для плавающих чисел, то тогда действительно можно было бы говорить о каких-то "битах" в плавающих типах. Но С и С++ сознательно и намеренно не делают такого шага. Языки С и С++ не хотят никому навязывать именно этот стандарт.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 15.05.2023, 09:16 | |||
|
Как вы понимаете смысл и назначение вот этой цитаты?
Т.е. я хочу повернуть разговор в следующее русло и начать исходить из следующих вводных: если мы предполагаем, что разработчики стандарта технически грамотные люди, на протяжении многих лет занимающиеся составлением не только упомянутого документа, но и разработкой компиляторов, баз данных, систем АСУ и т.п (а у нас нет объективных причин предполагать иначе), то должна же быть какая-то причина, техническая причина, что подобные строки попадают в документ? Вот мне бы очень хотелось бы узнать как вы сами понимаете эти причины?
0
|
|||
|
Комп_Оратор)
|
|
| 15.05.2023, 13:01 | |
|
DrOffset, я описывал свои соображения и о зависимости от реализации и о точности при сравнении. Можно было бы ещё добавить тот факт что переместительное свойство при сложении (например) чисел, которое соблюдается для целых типов, не соблюдается для типов с плавающей точкой. Всё так.
И тем не менее, если пофантазировать, то можно было бы выделить числовой ряд двоичного представления матиссы (для определённости, - нормализованной как число от 0 до 1, включительно), включающий столько знаков, сколько гарантируется точностью данной системы. Этот ряд (без ведущего нуля и запятой) достаточно однозначно представляет нечто очень близкое к мантиссе. Непонятно, также, что делать с экспонентой. Эти соображения полностью отбивают охоту для поиска двоичного представления чисел с плавающей точкой, с целью его стандартизации, в качестве представления. Я буду немало удивлён если когда-нибудь для плавающих будут определены операции типа double::to_binnary. Нужен какой-то кардинальный рывок вычтехники для этого. Не доживу)
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 15.05.2023, 13:15 | |
|
IGPIGP, мантисса иногда бывает представлена шестнадцатерично.
1
|
|
|
Комп_Оратор)
|
||
| 15.05.2023, 15:47 | ||
|
Важно, с моей точки зрения, что у целых неотрицательных есть натуральный двоичный формат. У чисел с плавающей точкой нет такого. Их форматы, это результат соглашений связанных с технологиями. Это два принципиально разных случая. И тем не менее, я как инженер, которому приходилось работать с НТД (нормативно-техническая документация: ГОСТы, ОСТы, РТМы, ТУ) я могу сказать, что хороший стандарт не может не ссылаться на другие стандарты. Особенно плохо ему без базовых стандартов в смежных областях. Именно по этому, так много усилий и времени уходит на периодические пересмотры стандартов с целью их обновления путём приведения в соответствие. Какой-то смежный обновился, а мы на него ссылались. Эх-х... Нужно перечесть, учесть изменения, и если надо - обновиться. Это просто нормально. Гораздо хуже, если стандарт пытается парить над реальностью игнорируя предметную область. Такое самооскопление делает стандарт инвалидом. В частности по вопросам формата чисел с плавающей точкой, вполне можно бы создать рабочую группу которая охватывала бы несколько самых распространённых стандартов. А в С++ std записать: "Настоящий стандарт в части чисел с плавающей точкой распространяется на следующие форматы в соответствии со стандартами /..../". И те у кого марсианский дабл просто не будут использовать ряд встроенных возможностей. А те что не с Марса, будут чувствовать себя лучше. Но тут им решать. Ни кто не хочет лишней работы)
0
|
||
| 15.05.2023, 15:47 | |
|
Освещение. ошибка операции с плавающей точкой Арифметические операции для чисел с плавающей точкой Когда нельзя применять метод наложения и почему? Арифметические операции над числами в формате с плавающей точкой Метод выводит не то, что нужно операции с плавающей точкой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Море в объективе
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 и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|