Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915

Почему битовые операции нельзя применять к переменной с плавающей точкой?

12.05.2023, 17:36. Показов 3458. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Собственно сам вопрос: почему битовые операции нельзя применять к переменной с плавающей точкой типа float и double ?

То есть я понимаю, что double и float - это не целые числа и изменение бит не отображается "прямолинейно" на самом интерпретируемом значении хранящемся в double и float, но тут вопрос, не в этом, а в том, что за это отвечает программист и если он что то не так сдвинул и тому подобное, то это проблемы программиста.

Ведь в С и С++ никто не запрещает писать за пределы своей выделенной памяти, почему же тут на запрет битовый операций ?

Или есть какой то "технический" момент ну там "труднореализуемый" ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.05.2023, 17:36
Ответы с готовыми решениями:

Ошибка операции с плавающей точкой
Program qqq; Uses crt; var i,n:byte; s:real; begin clrscr; Writeln('Vvedite n'); Readln(n); s:=0;

арифметические операции с плавающей точкой
Препод в универе дал какое то сумасшедшее задание: Нужно составить алгоритмы для сложения, вычитания, умножения и деления чисел с...

Арифметические операции с числами с плавающей точкой
Почему 360-0.1!=359.90000000.. а ерунде? и как это исправить? (вложен рисунок) int main() { double min=0; double step=0.10; ...

52
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.05.2023, 01:55
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Наталья8 Посмотреть сообщение
Лишь с крышею беды не было...
Крышу сдвинуть легче чем дабл. Даже если и упала. Архимед сказал: - Дайте мне крышу и я переверну плавающую точку. Но не судьба. Тупой римский формат солдат прервал ход мысли)
3
Нарушитель
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,218
14.05.2023, 01:59
Поэт...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
14.05.2023, 08:31
IGPIGP, есть такое течение - пуристы. Я бы назвал их "юридическими программистами". Их принцип известен - Fiat iustitia, et pereat mundus. Если в стандарте языка на записано, что числа с плавающей точкой хранятся в двоичном коде (а больше им храниться и не в чем! Не в святом же духе!), пурист будет на полном серьезе утверждать, что числа с плавающей точкой есть "непостижимая сущность", а попытка ее познать - это преступление против нравственности. Между тем, три строчки кода:

C
1
2
3
    float x = 0.5;
    int *p = (int *) &x;
    printf("%x\n",*p);
Позволяют убедиться, что сущность вполне постижима:

Вывод:

3f000000
3
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.05.2023, 09:15
Catstail, числа с плавающей точкой хранятся в многослойном формате. Двоичный это последний слой. Целые же числа имеют двоичный формат как свой естественный формат. Поэтому логические операции над битовым представлением целого числа имеют ясный логический смысл, в то время как у данных операций над двоичным представлением чисел типа double (IEEE-754 + bla-bla-bla) такого смысла не видно.
Если пофилософствовать. То могу нарисовать свою картинку.

Цитата Сообщение от Ибо сказано есть:
Есть Да и есть Нет, а остальное это от Дабла
Мы привыкли к тому что целые числа, это сущности обладающие арифметическими свойствами. Но с точки зрения чистой логики это группы булевых величин. Один разряд кодирует два состояния, два разряда - 4 и т.п. Между арифметикой и логикой есть строгое и стройное соответствие. Для двух разрядов (и не только) все состояния перечисляются последовательно от меньшего неотрицательного до максимально возможного: 0, 1, 2, 3 (00, 01, 10, 11).
А у Дябло не видно такого соответствия. Именно в этом смысле они и не бинарные. Хотя хранятся они в двоичном формате.
Любые двоичные операции над представлением, если выполнять их прямолинейно: что вижу то и сдвижу (если о сдвиге говорить), будут, семантически, операциями над целым числом. Однако, связь такого целого числа со значением, представляемого им числа с плавающей точкой, с учётом формата, не столь натуральна как у целых чисел. Она зависит от целого ряда соглашений связанных с технологическими ограничениями. В результате имеем закодированное нечто.
Я не говорю, что массив double нельзя спрятать от посторонних глаз от XOR'ив целочисленное представление. С точки чистой криптологии, это возможно. Но во-первых это будут булевы танцы над целыми числами и во-вторых, это не будет иметь ни какого логического смысла связанного с значением хранимых, плавающих.
Это потому, что целые - являются булевыми группами, а дяблы, - нет. В любом языке (или почти в любом) есть перечисления, которые отражают то факт, что целые числа позволяют логическое ветвление на множестве более чем Да и Нет. Но я не слышал чтобы такие вещи кому-то вздумалось реализовывать в виде чисел с плавающей точкой.
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
14.05.2023, 10:11
IGPIGP, а какой смысл в этих "наворотах" (многослойный формат и т.п.)? Любой тип данных, с которым работает классический компьютер - есть набор битов. Это так или не так? Если не так, то приведите контрпример.

Естественно-научный подход (на котором воспитан я) предлагает упрощать, а не усложнять... И знаете, мне уже немало лет, но этот подход никогда не подводил.

Не по теме:

Эпиграмма, посвященная известному поэту Леониду Мартынову:

Поэт от слова внятного
идет путем обратного
Чтоб из всего понятного
все сделать непонятным



Добавлено через 7 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
В результате имеем закодированное нечто.
- да. И с этим "нечто" нужно обращаться соответствующим образом. Но если захочется увидеть битовое представление, не вижу проблем!
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
14.05.2023, 11:07
Цитата Сообщение от Catstail Посмотреть сообщение
IGPIGP, а какой смысл в этих "наворотах" (многослойный формат и т.п.)?
Catstail, тут уже несколько текстов присутствует о том, что у целочисленного представления (битового уровня) для дабл и целочисленного представления битового уровня для целого смысл совершенно разный.
Цитата Сообщение от Catstail Посмотреть сообщение
Любой тип данных, с которым работает классический компьютер - есть набор битов. Это так или не так?
это так. Но там же сказано и о том, что групповые логические операции над наборами разных типов (unsigned и double, в текущем контексте уместны) имеют разный смысл в силу того, что разряды у данных типов сгруппированы по разному. Это разные логические группы.
Цитата Сообщение от Catstail Посмотреть сообщение
если захочется увидеть битовое представление, не вижу проблем
Видит око да зуб неймёт. Если вы собираетесь булить дяблу как целое, то это не сложно. Нет вопроса в такой формулировке темы. Но это будет буллинг дябло в чистом виде. Дябло такого не прощает. А с формальной точки зрения нет вопроса. Вопрос лишь в том, а нужно ли предъявлять комитетчикам за то что они не позаботились о том, чтобы вменить компилятору в обязанность применять булевы операции к любым кускам памяти. В данном случае я на их стороне.
Catstail, не ужели на языке С можно безнаказанно отбуллить дяблу. Без преобразований в целочисленное представление, а в натуральном виде?
С какой-то точки зрения (как ни парадоксально) дяблы и пр. не перечислимы. Я имею ввиду тот факт, что в практических расчётах нельзя полагаться на представление так как мы это делаем с целыми. Нужно везде, где есть вариант неустойчивости, юзать святой эпсилон. С ним и перечисления можно было бы сочинить и свичи которые сравнивают дяблы с учётом эпсилон могли бы иметь место. Сделало ли бы это нашу жизнь менее похожей на дурдом? Мой ответ - отнюдь.
А поэты... Поэты обострённо чувствуют гармонию. Это позволяет не насиловать естественную плоть камня, а оставить лишь то естественное в нём, что гармонирует с замыслом. Тут переплетаются этика (достоинство замысла) и эстетика (красота выражения замысла в форме поражающей ожидания зрителя). В этом смысле всё естественное красиво (если убрать лишнее).

Я бы перефразировал приведенную вами эпиграмму
Поэт от слова внятного
Идет путем обратного
Чтоб из всего понятного
Достигнуть непонятного
Достигнуть и постигнуть
А после - перепрыгнуть
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
14.05.2023, 23:47
Цитата Сообщение от Catstail Посмотреть сообщение
Любой тип данных, с которым работает классический компьютер - есть набор битов. Это так или не так? Если не так, то приведите контрпример.
Начнается стандартный танец... "Классические компьютеры" и "контрпримеры"

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

Как определяется понятие "бита" в С и С++ я уже говорил выше, и повторять не буду (отлистайте свой конспект моих собщений и пречитате еще раз сами). Понятие "бита" в С и С++ определено только для целых типов. Вот и все. Ничего непонятного в этом нет.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38209 / 21142 / 4312
Регистрация: 12.02.2012
Сообщений: 34,755
Записей в блоге: 14
15.05.2023, 05:51
TheCalligrapher, да-да... ничего нового. Выхожу из обсуждения.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
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
Цитата Сообщение от Catstail Посмотреть сообщение
Если в стандарте языка на записано, что числа с плавающей точкой хранятся в двоичном коде (а больше им храниться и не в чем! Не в святом же духе!), пурист будет на полном серьезе утверждать, что числа с плавающей точкой есть "непостижимая сущность", а попытка ее познать - это преступление против нравственности.
А давайте порассуждаем здраво, без привлечения ярлыков и объединения людей в какие-то группы по интересам? Только технические вопросы.
Как вы понимаете смысл и назначение вот этой цитаты?
The three distinct types float, double, and long double can represent floating-point numbers.
The type double provides at least as much precision as float, and the type long double provides at least as much precision as double.
The set of values of the type float is a subset of the set of values of the type double; the set of values of the type double is a subset of the set of values of the type long double.
The types float, double, and long double, and cv-qualified versions ([basic.type.qualifier]) thereof, are collectively termed standard floating-point types.

An implementation may also provide additional types that represent floating-point values and define them (and cv-qualified versions thereof) to be extended floating-point types.
The standard and extended floating-point types are collectively termed floating-point types.
Except as specified in [basic.extended.fp], the object and value representations and accuracy of operations of floating-point types are implementation-defined.
В смысле, есть у вас какое-то мнение по поводу того, зачем тут написано именно так?
Т.е. я хочу повернуть разговор в следующее русло и начать исходить из следующих вводных: если мы предполагаем, что разработчики стандарта технически грамотные люди, на протяжении многих лет занимающиеся составлением не только упомянутого документа, но и разработкой компиляторов, баз данных, систем АСУ и т.п (а у нас нет объективных причин предполагать иначе), то должна же быть какая-то причина, техническая причина, что подобные строки попадают в документ? Вот мне бы очень хотелось бы узнать как вы сами понимаете эти причины?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
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
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
15.05.2023, 15:47
Цитата Сообщение от DrOffset Посмотреть сообщение
IGPIGP, мантисса иногда бывает представлена шестнадцатерично.
Это ещё один аргумент. Хотя я встречал лишь двоичное. Нормализованное от 1 до 2.
Важно, с моей точки зрения, что у целых неотрицательных есть натуральный двоичный формат. У чисел с плавающей точкой нет такого. Их форматы, это результат соглашений связанных с технологиями. Это два принципиально разных случая.
И тем не менее, я как инженер, которому приходилось работать с НТД (нормативно-техническая документация: ГОСТы, ОСТы, РТМы, ТУ) я могу сказать, что хороший стандарт не может не ссылаться на другие стандарты. Особенно плохо ему без базовых стандартов в смежных областях. Именно по этому, так много усилий и времени уходит на периодические пересмотры стандартов с целью их обновления путём приведения в соответствие. Какой-то смежный обновился, а мы на него ссылались. Эх-х... Нужно перечесть, учесть изменения, и если надо - обновиться. Это просто нормально. Гораздо хуже, если стандарт пытается парить над реальностью игнорируя предметную область. Такое самооскопление делает стандарт инвалидом.
В частности по вопросам формата чисел с плавающей точкой, вполне можно бы создать рабочую группу которая охватывала бы несколько самых распространённых стандартов. А в С++ std записать: "Настоящий стандарт в части чисел с плавающей точкой распространяется на следующие форматы в соответствии со стандартами /..../". И те у кого марсианский дабл просто не будут использовать ряд встроенных возможностей. А те что не с Марса, будут чувствовать себя лучше.
Но тут им решать. Ни кто не хочет лишней работы)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2023, 15:47

Освещение. ошибка операции с плавающей точкой
задание: построить тетраэдр и кольца которые будут вращаться вокруг него. код: #include <GL\glut.h> #include <GL\glu.h> ...

Арифметические операции для чисел с плавающей точкой
При написании программы возникла проблема с использованием операторов для чисел с плавающей точкой(FADD, FSUB, FMUL etc). .8087 ;...

Когда нельзя применять метод наложения и почему?
ЭЛЕКТРОТЕХНИКА !!!СРОЧНО НУЖНЫ ОТВЕТЫ НА ВОПРОСЫ ПО ЭЛЕКТРОТЕХНИКЕ!!!!БУДУ ОЧЕНЬ БЛАГОДАРНА! 1) когда нельзя применять метод наложения...

Арифметические операции над числами в формате с плавающей точкой
Есть 2 числа: -0.625 и -52.000 Необходимо написать по шагам последовательность действий, реализующих операцию сложения. 1. Перевожу...

Метод выводит не то, что нужно операции с плавающей точкой
Я уже весь мозг себе сломал. Не понимаю, почему не работает. Пробовал отдельно выводить height, все правильно, ratio, тоже правильно,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
53
Ответ Создать тему
Новые блоги и статьи
Море в объективе
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,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru