Re[2]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 01.07.21 09:12
Оценка: 1 (1) +5
Здравствуйте, Qt-Coder, Вы писали:

QC>3.4?


И что делать, если нужно 3 и 40?
--
Справедливость выше закона. А человечность выше справедливости.
Re: 3/4 vs 0.75
От: Qt-Coder  
Дата: 01.07.21 06:15
Оценка: 1 (1) +4
Здравствуйте, Homunculus, Вы писали:

3.4?
Re[7]: 3/4 vs 0.75
От: Dair Россия  
Дата: 01.07.21 10:01
Оценка: 6 (4)
Здравствуйте, Homunculus, Вы писали:

H>Слуш, вопрос не в тему. Увидел твою подпись. У тебя действительно такая необычная двойная фамилия? А почему так получилось? Если я конечно не лезу не в свое дело, просто интересно. Нисколько не хотел задеть вопросом.


У меня в самом деле такая фамилия. У отца была такая же, у деда — тоже.

Семейная легенда говорит, что при царе-горохе некая моя русская пра-пра-[...]-бабушка, имя и даты утратились, вышла замуж в Российской Империи за австрийца Шмидтгофа (Schmidt — кузнец, Hof — двор, т.е., то ли придворный кузнец, то ли попросту кузнецкий двор), который потом куда-то потратился, и тогда она вышла замуж за Лебедева, который усыновил её сына от первого брака. А поскольку тогда в Империи уже был национализм, то "чужую кровь", чтобы не терять, оставили и с исходной фамилией тоже. Насколько это правда — я , спросить уже не с кого, я теперь самый старший с такой фамилией.
Отредактировано 01.07.2021 10:08 Dair . Предыдущая версия .
Re: 3/4 vs 0.75
От: Alexander G Украина  
Дата: 01.07.21 05:32
Оценка: 5 (2) +2
Здравствуйте, Homunculus, Вы писали:


H>Как в 0.75 засунуть инфу о 3/4 ?


H>Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?


Думаю, в любом случае будет стрёмная эквилибристика. Другой вариант, кроме поразрядного:

Если знаменатель всегда меньше числителя, можно в целой части хранить знаменатель, в дробной -- значение дроби.
trunc(4.75) = 4 -- знаменатель
round( frac(4.75)*trunc(4.75) ) = round( 0.75 * 4 ) = 3 -- числитель
Русский военный корабль идёт ко дну!
Re[2]: 3/4 vs 0.75
От: SаNNy Россия  
Дата: 01.07.21 05:07
Оценка: :))) :)
Здравствуйте, B-52, Вы писали:

B5>Здравствуйте, Homunculus, Вы писали:


H>>Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?


B5>- Б4

B5>- Ранил!

— В-52
— Убил!
Re[6]: 3/4 vs 0.75
От: Лось Чтостряслось СССР  
Дата: 01.07.21 12:34
Оценка: +4
Здравствуйте, Dym On, Вы писали:

DO>Если мне склероз не изменяет, то если задано литералом, типа float X=3.4, то будет 3.4, а если результат операции, ну типа x = 34/10, то уже тогда — да, или 3.399999999999 или 3.40000000000001.

мне казалось некоторые значения в принципе не могут храниться в float
социализм или варварство
Re: 3/4 vs 0.75
От: Sinclair Россия https://github.com/evilguest/
Дата: 01.07.21 05:42
Оценка: 5 (3)
Здравствуйте, Homunculus, Вы писали:

H>Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?

Речь о двух целых числах?
Каковы их диапазоны?
Есть известный алгоритм по взаимно-однозначному отображению рациональных чисел на целые.
Судя по всему, речь идёт даже о натуральных числах.
Тогда есть очевидное решение — нумерация треугольником:

0 1 2 3
0 0 1 3 6
1 2 4 7
2 5 8
3 9
Тут n[x, y] = (x+y)*(x+y+1)/2+y
В обратную сторону cходу формулу не напишу — но, похоже, надо будет брать квадратный корень, округлять и вычитать.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: 3/4 vs 0.75
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 01.07.21 06:38
Оценка: 1 (1) +2
Здравствуйте, Homunculus, Вы писали:

H>Мне надо в числовой тэг объекта (float) запихнуть два числа.


А заказчику это надо?
Как аналитик скажу тебе, что твоё желание — бред.
Твоя задача решается через 2 числа.
Вселенная бесконечна как вширь, так и вглубь.
Re[7]: 3/4 vs 0.75
От: pagid Россия  
Дата: 01.07.21 09:50
Оценка: +3
Здравствуйте, Homunculus, Вы писали:

H>Как раз вопрос и был задан, потому что это и важно

Тогда и храни два числа. А как, это в зависимости в каких они пределах могут изменяться. 3004 вполне годный вариант, если для знаменателя достаточно трех десятичных разрядов. Некрасивое решение? А оно некрасивое по причине необходимости использовать float, то есть уже кривое и записью "3004" кривее/некрасивее не сделаешь.
Re[3]: 3/4 vs 0.75
От: Maniacal Россия  
Дата: 01.07.21 09:59
Оценка: 2 (2)
Здравствуйте, rg45, Вы писали:

R>И что делать, если нужно 3 и 40?


3.04?

отзеркалить
Re: 3/4 vs 0.75
От: Sheridan Россия  
Дата: 01.07.21 05:45
Оценка: 1 (1) +1
Здравствуйте, Homunculus, Вы писали:

H>Мне надо в числовой тэг объекта (float) запихнуть два числа.

Запихни туда адрес объекта, содержащего нужное тебе в удобном формате. Да, надо будет подпрыгнуть в приседе чтобы из float получить адрес, добраться до объекта и так далее. Зато работать потом будет удобно.
Matrix has you...
Re[8]: 3/4 vs 0.75
От: ути-пути Россия  
Дата: 01.07.21 10:15
Оценка: 1 (1) +1
Здравствуйте, Dair, Вы писали:

D>Да, поэтому я бы имплементацию метода floatTagToMyNumbers и myNumbersToFloatTag писал бы во время отладки (или, там, класса-конвертера), посмотрев, что происходит с тем или иным тэгом.


Это ничего не гарантирует, библиотека может раз в полнолуние менять поведение для одного единственного значения, а потом опять работать нормально, до следующего полнолуния.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[7]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 01.07.21 12:45
Оценка: 1 (1) +1
Здравствуйте, Лось Чтостряслось, Вы писали:

ЛЧ>мне казалось некоторые значения в принципе не могут храниться в float


И это понятно — float, как и другие числовые типы представлены фиксированным количеством бит, соответственно могут обестечить представление лишь какого-то конечного числа вариантов. Тогда как множество вещественных числел бесконечно на любом отрезке числовой прямой (для любой пары различных вещественных чисел всегда найдется третье вещественное число, которое будет больше одного и меньше другого).
--
Справедливость выше закона. А человечность выше справедливости.
Re: 3/4 vs 0.75
От: Shmj Ниоткуда  
Дата: 01.07.21 05:16
Оценка: +2
Здравствуйте, Homunculus, Вы писали:

H>Мне надо в числовой тэг объекта (float)


Почему именно float? Он же не точный.

H>Как в 0.75 засунуть инфу о 3/4 ?


Это аж из 6-го класса, очень сложно, не все потянут: https://www.berdov.com/docs/fraction/kak-perevesti-desyatichnuyu-drob-v-obiknovennuyu/

H>Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?


Устанавливать биты.
=сначала спроси у GPT=
Re[2]: 3/4 vs 0.75
От: Homunculus Россия  
Дата: 01.07.21 05:20
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Это аж из 6-го класса, очень сложно, не все потянут:


Действительно, не все потянут, что 0.5 — это и пятый из десяти и третий из шести.
Re[4]: 3/4 vs 0.75
От: Homunculus Россия  
Дата: 01.07.21 05:27
Оценка: :))
Здравствуйте, pagid, Вы писали:

P>Здравствуйте, Homunculus, Вы писали:


H>>Действительно, не все потянут, что 0.5 — это и пятый из десяти и третий из шести.

P>Так сокращать дроби где-то примерно тогда и учат, или еще раньше.

Так это сокращение я имел ввиду под «потеря информации». Но понять это смогли не только ли все, мало кто смог понять. И стали меня тыкать в программу 6 класса
Re: 3/4 vs 0.75
От: Sealcon190 Соломоновы острова  
Дата: 01.07.21 08:24
Оценка: +2
Здравствуйте, Homunculus, Вы писали:

H>Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?


Например написать свой тип, с блэкджеком и шлюхами.
Re: 3/4 vs 0.75
От: Je suis Mamut  
Дата: 01.07.21 08:44
Оценка: +2
H>Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?

Распихать по битикам — это ж самое естественное. Только не забывай, у тебя не все варианты доступны — много NaN-ов и тебе их с высокой вероятностью превратят в один единственный вариант NaN-а.
Re[3]: 3/4 vs 0.75
От: Pzz Россия https://github.com/alexpevzner
Дата: 01.07.21 09:49
Оценка: +2
Здравствуйте, Homunculus, Вы писали:

Pzz>>Как в одно число засунуть два числя? Никак!


H>Спорное утверждение. Хочешь сказать, что "3/4" — это не "число", а "действие"?


Я хочу сказать, что 3/4, чем бы оно не было, состоит из двух независимых параметров. Технически их можно засунуть в 4 байта, если разрядов хватает дня представления обоих параметров с приемлимой точностью (например, разбросав по разрядам, не важно, в двоичной записи или в десятичной). Но оно от этого не перестанет быть двумя независимыми параметрами.
Re[6]: 3/4 vs 0.75
От: ути-пути Россия  
Дата: 01.07.21 10:00
Оценка: +2
Здравствуйте, Dair, Вы писали:

D>нам то что оно float вообще не очень интересно, поэтому и nan/inf тоже. Для нас это 64 бита, которые мы как хотим так и рассматриваем:


Мы-то да, можем его рассматривать как сырую память, а вот как этот float рассматривает его библиотека, и не перекорячит ли где-то у себя внутре — это вопрос.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[8]: 3/4 vs 0.75
От: Homunculus Россия  
Дата: 02.07.21 18:50
Оценка: :))
Здравствуйте, xma, Вы писали:

Хватит, а.
Кто первый перестанет — тот умнее
Re[5]: 3/4 vs 0.75
От: Maniacal Россия  
Дата: 01.07.21 10:09
Оценка: 1 (1)
Здравствуйте, ути-пути, Вы писали:

УП>Здравствуйте, Dair, Вы писали:


D>>float это нонче 64 бита же? Ну и кодируй ими два 32-битных числа, числитель и знаменатель.


Нет. Это float64 нонче 64 бита и то в Go.

число с плавающей запятой двойной точности IEEE 754 всегда равно 64 битам. Аналогично, одинарная точность float всегда равна 32 битам.

Re: 3/4 vs 0.75
От: B-52 Россия  
Дата: 01.07.21 05:02
Оценка: +1
Здравствуйте, Homunculus, Вы писали:

H>Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?


— Б4
— Ранил!
Re[3]: 3/4 vs 0.75
От: pagid Россия  
Дата: 01.07.21 05:25
Оценка: -1
Здравствуйте, Homunculus, Вы писали:

H>Действительно, не все потянут, что 0.5 — это и пятый из десяти и третий из шести.

Так сокращать дроби где-то примерно тогда и учат, или еще раньше.
Re[7]: 3/4 vs 0.75
От: ути-пути Россия  
Дата: 01.07.21 09:38
Оценка: +1
Здравствуйте, Homunculus, Вы писали:

P>>Ну так-то это 75 из 100, но это неважно.


H>Как раз вопрос и был задан, потому что это и важно


Тогда тебе плавающая точка не подходит, только в виде изначальных не сокращенных дробей.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[3]: 3/4 vs 0.75
От: ути-пути Россия  
Дата: 01.07.21 09:48
Оценка: +1
Здравствуйте, Homunculus, Вы писали:

H>Спорное утверждение. Хочешь сказать, что "3/4" — это не "число", а "действие"?


Это запись числа; если подумать, 0.75 — это ведь еще большая условность.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[5]: 3/4 vs 0.75
От: Dair Россия  
Дата: 01.07.21 09:50
Оценка: +1
Здравствуйте, ути-пути, Вы писали:

D>>float это нонче 64 бита же? Ну и кодируй ими два 32-битных числа, числитель и знаменатель.

УП>Вроде могут быть нюансы со специальными значениями типа nan, inf и т.п.?

нам то что оно float вообще не очень интересно, поэтому и nan/inf тоже. Для нас это 64 бита, которые мы как хотим так и рассматриваем:

auto myValues = (uint64_t)floatTag;
uint32_t numerator = myValues >> 32;
uint32_t denominator = myValues & 0xFFFFFFFF;


или даже

auto myValues = (uint64_t)floatTag;
uint32_t numerator = 0;
uint32_t denominator = 0;

memcpy(&floatTag, &denominator, 4);
memcpy(((char*)&floatTag) + 4, &numerator, 4);


А, да, если этот float десериализуется из строчки, или ещё где-то участвует в операциях с плавающей точкой, тогда бОльшая беда, конечно. Тогда тупо математикой — про порядок забиыть, пользоваться мантиссой в десятичном представлении, как тс изначально писал — числитель*выбранное смещение + знаменатель.
Отредактировано 01.07.2021 9:56 Dair . Предыдущая версия .
Re[2]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 01.07.21 10:02
Оценка: +1
Здравствуйте, Pzz, Вы писали:

Pzz>Это два числа, даже если они упакованы в 4 байта.


Так в этом же и вопрос, собсно: как лучше упаковать два целых числа в один float. По поводу семантики у него вопросов нет, насколько я могу судить.
--
Справедливость выше закона. А человечность выше справедливости.
Re[4]: 3/4 vs 0.75
От: Homunculus Россия  
Дата: 01.07.21 10:02
Оценка: +1
Здравствуйте, Maniacal, Вы писали:


M>отзеркалить


Так делают те, кто хотят сделать себя незаменимым в проекте и чтоб проект гикнулся после ухода того, кто так делает
Re[8]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 01.07.21 10:08
Оценка: :)
Здравствуйте, Dair, Вы писали:

D>Семейная легенда говорит, что при царе-горохе некая моя русская пра-пра-[...]-бабушка, имя и даты утратились, женилась в Российской Империи на австрийце Шмидтгофе (Schmidt — кузнец, Hof — двор, т.е., то ли придворный кузнец, то ли попросту кузнецкий двор), который потом куда-то потратился, и тогда она вышла замуж за Лебедева, который усыновил её сына от первого брака. А поскольку тогда в Империи уже был национализм, то "чужую кровь", чтобы не терять, оставили и с исходной фамилией тоже. Насколько это правда — я , спросить уже не с кого, я теперь самый старший с такой фамилией.


https://www.youtube.com/watch?v=4dM_dBBTiEI
--
Справедливость выше закона. А человечность выше справедливости.
Re[10]: 3/4 vs 0.75
От: ути-пути Россия  
Дата: 01.07.21 10:57
Оценка: +1
Здравствуйте, Dair, Вы писали:

D>Тогда кранты.


Можно обойти все неудобные значения, чтобы всегда был корректный float, которому ничего не грозит от перекладывания через всякие регистры. Но тут предлагали способы гораздо проще, хоть и еще больше сужающие диапазоны возможных значений.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: все зависит
От: Quebecois Канада https://www.canada.ca/
Дата: 01.07.21 21:12
Оценка: +1
от того, что с этим float делает движок. Если вообще ничего не делает, не сериализует и не преобразовывает, то тупо reinterpret_cast из float в int, и дальше побитно. Например, два 16-битных индекса.

Если движок что-то делает, то надо разбираться, что именно, и уже оттуда плясать. Например, если он преобразовывает эти теги строку и обратно, то надо смотреть, как там будет работать округление, что потеряется, а что нет.

Самый бронебойный вариант — вообще забить на тэги, и сделать хэш-таблицу от уникалього ID объекта, если он есть. По производительности будет вменяемо + большинство граблей это решение облетит на версту. Если нет unique id, то можно завести свою таблицу (линейную или хэш) и писать в этот float номер записи в этой таблице. Опять же надо смотреть, что там будет с точностью при сериализации.
Re[6]: 3/4 vs 0.75
От: ути-пути Россия  
Дата: 01.07.21 21:46
Оценка: +1
Здравствуйте, Real 3L0, Вы писали:

R3>Ещё так делают те, кто не любит писать документацию.


А кто-то ее любит писать?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
3/4 vs 0.75
От: Homunculus Россия  
Дата: 01.07.21 04:17
Оценка:
Не знай в какую тему сунуть вопрос, поэтому сюда.

Мне надо в числовой тэг объекта (float) запихнуть два числа. Номер объекта в некоем массиве, но еще и каждый объект по тегу должен знать а какой он из скольки.

Другими словами, например дробь 3/4 — содержит эту информацию — у нас как бы третий объект из четырех.
А вот та же самая дробь в другом представлении — 0.75 — уже эту информацию теряет.

Как в 0.75 засунуть инфу о 3/4 ?

Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?
Отредактировано 01.07.2021 4:18 Homunculus . Предыдущая версия .
Re[5]: 3/4 vs 0.75
От: pagid Россия  
Дата: 01.07.21 05:40
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Так это сокращение я имел ввиду под «потеря информации». Но понять это смогли не только ли все, мало кто смог понять. И стали меня тыкать в программу 6 класса

Тогда никакой потери информации в переходе от 0.75 к 3/4 и не было. В 0.75 в принципе нет информации три это из четырех или шесть из восьми. Ну так-то это 75 из 100, но это неважно.
Re[6]: 3/4 vs 0.75
От: Homunculus Россия  
Дата: 01.07.21 05:45
Оценка:
Здравствуйте, pagid, Вы писали:

P>Ну так-то это 75 из 100, но это неважно.


Как раз вопрос и был задан, потому что это и важно
Re: 3/4 vs 0.75
От: s_aa Россия  
Дата: 01.07.21 05:46
Оценка:
H>Как в 0.75 засунуть инфу о 3/4 ?

Мантисса и экспонента?
Жизнь не обязана доставлять удовольствие. Достаточно отсутствия страданий.
Re: 3/4 vs 0.75
От: L.K. Марс  
Дата: 01.07.21 05:48
Оценка:
У чисел с плавающей точкой есть мантисса (двоичная), экспонента (тоже двоичная) и знак.

Можно хранить в мантиссе делитель дроби, а в экспоненте делимое.

По сути получится хранилище для двух целочисленных переменных.
Re: 3/4 vs 0.75
От: Dym On Россия  
Дата: 01.07.21 06:20
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Мне надо в числовой тэг объекта (float) запихнуть два числа. Номер объекта в некоем массиве, но еще и каждый объект по тегу должен знать а какой он из скольки.

Ну вообще в машинном представлении float это мантисса и степень. Если хочется простоты и наглядности, то цела и дробная части.
Например, число 3/4 записать как 3.4. Изврат, конечно, что там с точностью — хз, но зато просто и наглядно.
Счастье — это Glück!
Re[2]: 3/4 vs 0.75
От: Homunculus Россия  
Дата: 01.07.21 06:42
Оценка:
Здравствуйте, Real 3L0, Вы писали:


R3>А заказчику это надо?


Дело не в том, что надо заказчику, а в том, какой инструментарий предоставляет некий движок. А предоставляет он float тэг
Re[2]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 01.07.21 08:05
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>

0 1 2 3
0 0 1 3 6
1 2 4 7
2 5 8
3 9
S>Тут n[x, y] = (x+y)*(x+y+1)/2+y


Немного не так. В данном случае известно, что x < y, y >= 1 (по семантике y — это размер массива, а x — zero-based индекс элемента в массиве). Поэтому треугольник лучше сделать таким:

x — по горизонтали, y — по вертикали
0 1 2 3
1 0
2 1 2
3 3 4 5
4 6 7 8 9
И формула попроще:

n[x, y] = x + y*(y-1)/2;

Обратное преобразование мне выводить тоже лень
(И да, придется иметь дело с квадратным корнем и округлениями).
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 01.07.2021 10:33 rg45 . Предыдущая версия . Еще …
Отредактировано 01.07.2021 8:32 rg45 . Предыдущая версия .
Отредактировано 01.07.2021 8:31 rg45 . Предыдущая версия .
Отредактировано 01.07.2021 8:27 rg45 . Предыдущая версия .
Отредактировано 01.07.2021 8:15 rg45 . Предыдущая версия .
Отредактировано 01.07.2021 8:11 rg45 . Предыдущая версия .
Отредактировано 01.07.2021 8:10 rg45 . Предыдущая версия .
Отредактировано 01.07.2021 8:08 rg45 . Предыдущая версия .
Отредактировано 01.07.2021 8:06 rg45 . Предыдущая версия .
Re[3]: 3/4 vs 0.75
От: Dair Россия  
Дата: 01.07.21 08:18
Оценка:
Здравствуйте, Homunculus, Вы писали:

R3>>А заказчику это надо?

H>Дело не в том, что надо заказчику, а в том, какой инструментарий предоставляет некий движок. А предоставляет он float тэг

float это нонче 64 бита же? Ну и кодируй ими два 32-битных числа, числитель и знаменатель.
Re[2]: 3/4 vs 0.75
От: Лось Чтостряслось СССР  
Дата: 01.07.21 08:28
Оценка:
Здравствуйте, Qt-Coder, Вы писали:

QC>3.4?


нет такого числа
социализм или варварство
Re[3]: 3/4 vs 0.75
От: Qt-Coder  
Дата: 01.07.21 08:57
Оценка:
Здравствуйте, Лось Чтостряслось, Вы писали:

ЛЧ>Здравствуйте, Qt-Coder, Вы писали:


QC>>3.4?


ЛЧ>нет такого числа

Есть 3.399999999999 ?
Re[4]: 3/4 vs 0.75
От: Лось Чтостряслось СССР  
Дата: 01.07.21 09:10
Оценка:
Здравствуйте, Qt-Coder, Вы писали:

ЛЧ>>нет такого числа

QC>Есть 3.399999999999 ?

типа того
социализм или варварство
Re[3]: 3/4 vs 0.75
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 01.07.21 09:31
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Дело не в том, что надо заказчику, а в том, какой инструментарий предоставляет некий движок. А предоставляет он float тэг


1. Попытка натянуть сову на глобус. Заказчик тут очень важен. Завтра он тебе скажет хранить строку, ты её тоже во float пихать будешь?
2. В данном случае единственный (вроде) вариант: первое число хранить до точки, второе — после. Но не знаю, как float с этим справится.

UPD: Отписались
Автор: rg45
Дата: 01.07.21
, что второй вариант не подходит.
Вселенная бесконечна как вширь, так и вглубь.
Отредактировано 01.07.2021 9:35 Real 3L0 . Предыдущая версия .
Re: 3/4 vs 0.75
От: Pzz Россия https://github.com/alexpevzner
Дата: 01.07.21 09:40
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Как в 0.75 засунуть инфу о 3/4 ?


Как в одно число засунуть два числя? Никак!

H>Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?


Это два числа, даже если они упакованы в 4 байта.
Re[2]: 3/4 vs 0.75
От: Homunculus Россия  
Дата: 01.07.21 09:41
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Как в одно число засунуть два числя? Никак!


Спорное утверждение. Хочешь сказать, что "3/4" — это не "число", а "действие"?
Re[4]: 3/4 vs 0.75
От: ути-пути Россия  
Дата: 01.07.21 09:42
Оценка:
Здравствуйте, Dair, Вы писали:

D>float это нонче 64 бита же? Ну и кодируй ими два 32-битных числа, числитель и знаменатель.


Вроде могут быть нюансы со специальными значениями типа nan, inf и т.п.?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[5]: 3/4 vs 0.75
От: Maniacal Россия  
Дата: 01.07.21 09:43
Оценка:
Здравствуйте, Лось Чтостряслось, Вы писали:

ЛЧ>Здравствуйте, Qt-Coder, Вы писали:


ЛЧ>>>нет такого числа

QC>>Есть 3.399999999999 ?

ЛЧ>типа того


Округляется на раз-два
Re[8]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 01.07.21 09:50
Оценка:
Здравствуйте, ути-пути, Вы писали:

УП>Тогда тебе плавающая точка не подходит, только в виде изначальных не сокращенных дробей.


Ну, плавющую точку от него требует его framework, а он может вполне совместить в памяти (union, reinterpret_cast и т.п.) float и пару целых чисел подходящего размера и на своей стороне работать с этой парой. Нужно только позаботиться, чтоб в NaN-ы не залетать.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 01.07.2021 9:53 rg45 . Предыдущая версия . Еще …
Отредактировано 01.07.2021 9:52 rg45 . Предыдущая версия .
Отредактировано 01.07.2021 9:51 rg45 . Предыдущая версия .
Re[6]: 3/4 vs 0.75
От: Homunculus Россия  
Дата: 01.07.21 09:54
Оценка:
Здравствуйте, Dair, Вы писали:

Слуш, вопрос не в тему. Увидел твою подпись. У тебя действительно такая необычная двойная фамилия? А почему так получилось? Если я конечно не лезу не в свое дело, просто интересно. Нисколько не хотел задеть вопросом.
Re[5]: 3/4 vs 0.75
От: pagid Россия  
Дата: 01.07.21 10:00
Оценка:
Здравствуйте, ути-пути, Вы писали:

УП>Вроде могут быть нюансы со специальными значениями типа nan, inf и т.п.?

И поэтому не стоит играться с битами или пытаться объединить union'ом. Нужно как и изначально предложил ТС самому себе и нам преобразовывать в целое, а его уже во float и обратно (если нужно). Оценить конечно область допустимых значений и при преобразовании из float округлять, а не отбрасывать, но эту уже капитанствую.
Re[8]: 3/4 vs 0.75
От: Homunculus Россия  
Дата: 01.07.21 10:03
Оценка:
Здравствуйте, Dair, Вы писали:

Ух ты, супер. Спасибо, интересно.
Re[4]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 01.07.21 10:05
Оценка:
Здравствуйте, Maniacal, Вы писали:


M>3.04?

M>отзеркалить

Вариант, конечно, но тут сразу же вступает в игру погрешность представления. Геморр еще тот получится. Я бы поискал варианты попроще.
--
Справедливость выше закона. А человечность выше справедливости.
Re[7]: 3/4 vs 0.75
От: Dair Россия  
Дата: 01.07.21 10:05
Оценка:
Здравствуйте, ути-пути, Вы писали:

D>>нам то что оно float вообще не очень интересно, поэтому и nan/inf тоже. Для нас это 64 бита, которые мы как хотим так и рассматриваем:

УП>Мы-то да, можем его рассматривать как сырую память, а вот как этот float рассматривает его библиотека, и не перекорячит ли где-то у себя внутре — это вопрос.

Да, поэтому я бы имплементацию метода floatTagToMyNumbers и myNumbersToFloatTag писал бы во время отладки (или, там, класса-конвертера), посмотрев, что происходит с тем или иным тэгом.
Re[9]: 3/4 vs 0.75
От: Dair Россия  
Дата: 01.07.21 10:41
Оценка:
Здравствуйте, ути-пути, Вы писали:

D>>Да, поэтому я бы имплементацию метода floatTagToMyNumbers и myNumbersToFloatTag писал бы во время отладки (или, там, класса-конвертера), посмотрев, что происходит с тем или иным тэгом.

УП>Это ничего не гарантирует, библиотека может раз в полнолуние менять поведение для одного единственного значения, а потом опять работать нормально, до следующего полнолуния.

Тогда кранты.
Re[2]: 3/4 vs 0.75
От: pugv Россия  
Дата: 01.07.21 10:55
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Запихни туда адрес объекта, содержащего нужное тебе в удобном формате.


А sizeof(float) == sizeof(void*) всегда?
Re[2]: 3/4 vs 0.75
От: Homunculus Россия  
Дата: 01.07.21 10:57
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Запихни туда адрес объекта, содержащего нужное тебе в удобном формате.


Ну, тэги обычно сериализуемые сущности. При реаллокации адреса накроются медным тазом.
Re[3]: 3/4 vs 0.75
От: Maniacal Россия  
Дата: 01.07.21 11:01
Оценка:
Здравствуйте, pugv, Вы писали:

P>А sizeof(float) == sizeof(void*) всегда?


Только на 32-битной архитектуре.
Re[2]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 01.07.21 11:08
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Запихни туда адрес объекта, содержащего нужное тебе в удобном формате. Да, надо будет подпрыгнуть в приседе чтобы из float получить адрес, добраться до объекта и так далее. Зато работать потом будет удобно.


А чтоб не зависеть от платформы, вместо адреса можно запихивать индекс в массиве. А в массив уже можно запихнуть все, что угодно, без ограничений на размер элемента.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 01.07.2021 11:09 rg45 . Предыдущая версия .
Re[4]: 3/4 vs 0.75
От: pugv Россия  
Дата: 01.07.21 11:08
Оценка:
Здравствуйте, Maniacal, Вы писали:

M>Только на 32-битной архитектуре.


Я на это и намекал. Качественно расставленные грабли. Не говоря уже о сериализации, что тоже упомянули ниже.
Re: 3/4 vs 0.75
От: Dimonka Верблюд  
Дата: 01.07.21 11:21
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Не знай в какую тему сунуть вопрос, поэтому сюда.


H>Мне надо в числовой тэг объекта (float) запихнуть два числа. Номер объекта в некоем массиве, но еще и каждый объект по тегу должен знать а какой он из скольки.


Неужели у тебя на столько закрытый и нерасширяемый формат, что надо так извращаться?

Конечно ты можешь этот float кастить в последовательность байт и делать с ним всё что угодно (первые два байта числитель, следующие знаменатель).
Но может можно как-то по человечески расширить формат?
Re[2]: 3/4 vs 0.75
От: Dimonka Верблюд  
Дата: 01.07.21 11:31
Оценка:
Здравствуйте, Dimonka, Вы писали:

А ещё можно кодировать в большие целые. Например:
13240
Жирным идёт информация о количестве знаков, далее идёт число. Округляешь до целых и декодируешь.
Re[3]: 3/4 vs 0.75
От: Pzz Россия https://github.com/alexpevzner
Дата: 01.07.21 11:52
Оценка:
Здравствуйте, rg45, Вы писали:

R>Так в этом же и вопрос, собсно: как лучше упаковать два целых числа в один float. По поводу семантики у него вопросов нет, насколько я могу судить.


Во float чертовски неудобно, там мантисса, порядок, каждые со своими знаками, эти биты причудливо сочетаются и не все комбинации валидны.

Тут надо смотреть. Если доступны честные 4 байта, пусть даже они называются словом float, но никто не контролирует валидность этого float'а, то проще всего использовать их, как две группы по 16 бит. В противном случае, я бы посмотрел, какой диапазон целых чисел доступен для точного представления в виде float, и распоряжался бы ими примерно так, как Homunculus изначально предполагал.
Re[5]: 3/4 vs 0.75
От: Dym On Россия  
Дата: 01.07.21 12:28
Оценка:
Здравствуйте, Лось Чтостряслось, Вы писали:

ЛЧ>>>нет такого числа

QC>>Есть 3.399999999999 ?
ЛЧ>типа того
Если мне склероз не изменяет, то если задано литералом, типа float X=3.4, то будет 3.4, а если результат операции, ну типа x = 34/10, то уже тогда — да, или 3.399999999999 или 3.40000000000001.
Счастье — это Glück!
Re[5]: 3/4 vs 0.75
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 01.07.21 13:15
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Так делают те, кто хотят сделать себя незаменимым в проекте и чтоб проект гикнулся после ухода того, кто так делает


Ещё так делают те, кто не любит писать документацию.
Вселенная бесконечна как вширь, так и вглубь.
Re[7]: 3/4 vs 0.75
От: Dym On Россия  
Дата: 01.07.21 13:22
Оценка:
Здравствуйте, Лось Чтостряслось, Вы писали:

ЛЧ>мне казалось некоторые значения в принципе не могут храниться в float

Ну естественно, разрядная сетка не бесконечна.
Счастье — это Glück!
Re[5]: 3/4 vs 0.75
От: Quebecois Канада https://www.canada.ca/
Дата: 01.07.21 21:17
Оценка:
Здравствуйте, pugv, Вы писали:

P>Здравствуйте, Maniacal, Вы писали:


M>>Только на 32-битной архитектуре.


P>Я на это и намекал. Качественно расставленные грабли. Не говоря уже о сериализации, что тоже упомянули ниже.

Грабли решаются static_assert-ом. А вообще, это из серии "быстро, дешево, качественно: выбери любые два". Качественный вариант — изучать/менять движок. Быстрый вариант — расставлять грабли и метить их флажками.
Re[3]: 3/4 vs 0.75
От: ути-пути Россия  
Дата: 01.07.21 21:44
Оценка:
Здравствуйте, rg45, Вы писали:

R>А чтоб не зависеть от платформы, вместо адреса можно запихивать индекс в массиве. А в массив уже можно запихнуть все, что угодно, без ограничений на размер элемента.


Только может потребоваться какое-то дополнительное хранилище для массива. Мы ж не знаем, может эти float библиотека где-то в БД хранит между сессиями. Вообще, ТС мог бы добавить подробностей.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: 3/4 vs 0.75
От: xma  
Дата: 02.07.21 03:58
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Мне надо в числовой тэг объекта (float) запихнуть два числа. Номер объекта в некоем массиве, но еще и каждый объект по тегу должен знать а какой он из скольки.


H>Другими словами, например дробь 3/4 — содержит эту информацию — у нас как бы третий объект из четырех.


белиберда какая то массив объектов один или несколько ? если один — то дели номер (объекта) на длину массива и всё — нафига это хранить ?

H>Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?


сначала опиши задачу нормально

если несколько (с объектами) — то тут зависит от того, может ли размер массивов динамически меняться / есть ли многопоток ?

если нет, то введи поле id в объект и юзай чё нить типа Hashmap ..
Re: 3/4 vs 0.75
От: scf  
Дата: 02.07.21 05:13
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?


Сначала нужно определиться с диапазоном данных, которые нужно хранить. И потом выбирать решение, т.к. при неудачном выборе можно потерять данные.
Re[2]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 02.07.21 05:16
Оценка:
Здравствуйте, xma, Вы писали:

xma>белиберда какая то массив объектов один или несколько ? если один — то дели номер (объекта) на длину массива и всё — нафига это хранить ?


Ага, "нихера не понял, но совет дам".
--
Справедливость выше закона. А человечность выше справедливости.
Re[2]: все зависит
От: Je suis Mamut  
Дата: 02.07.21 09:41
Оценка:
Q>от того, что с этим float делает движок.

разумно предположить, что делает то, что можно, а то что нельзя — не делает, не?

если оно не NaN — выживет, а если не денормализованное — выживет даже если попадет в лапы какого-то убогого процессора. т.е выкинуть два варианта экспоненты, все остальное — наше, вопрос только чтобы точности хватило
Re[3]: 3/4 vs 0.75
От: xma  
Дата: 02.07.21 14:01
Оценка:
Здравствуйте, rg45, Вы писали:

R>Ага, "нихера не понял, но совет дам".


можно подумать что ты (или кто то ещё) понял что он вообще хочет ? как изложил — такие и советы ..

  полит оффтоп
не говоря уже (про тебя) о том — зачем нормальному высокооплачиваемому прогеру — топить за коммунизм ..
Re[3]: все зависит
От: ути-пути Россия  
Дата: 02.07.21 14:42
Оценка:
Здравствуйте, Je suis Mamut, Вы писали:

JSM>разумно предположить, что делает то, что можно, а то что нельзя — не делает, не?


Правильно. Но можно быть точнее, вдруг делает лишь какое-то подмножество из допустимого.

JSM>если оно не NaN — выживет, а если не денормализованное — выживет даже если попадет в лапы какого-то убогого процессора. т.е выкинуть два варианта экспоненты, все остальное — наше, вопрос только чтобы точности хватило


А если оно не грузится в регистры, а только перекладывается в памяти, то может выжить в любом виде.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[4]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 02.07.21 16:56
Оценка:
Здравствуйте, xma, Вы писали:

xma>можно подумать что ты (или кто то ещё) понял что он вообще хочет ? как изложил — такие и советы ..


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

xma>не говоря уже (про тебя) о том — зачем нормальному высокооплачиваемому прогеру — топить за коммунизм ..


Без политики невмоготу? Так и быть, повторюсь, сделаю скидку на твой кипящий разум: http://rsdn.org/forum/flame.politics/8031169.1
Автор: rg45
Дата: 17.06.21
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 02.07.2021 17:23 rg45 . Предыдущая версия . Еще …
Отредактировано 02.07.2021 17:18 rg45 . Предыдущая версия .
Отредактировано 02.07.2021 17:17 rg45 . Предыдущая версия .
Отредактировано 02.07.2021 17:05 rg45 . Предыдущая версия .
Отредактировано 02.07.2021 17:03 rg45 . Предыдущая версия .
Отредактировано 02.07.2021 17:01 rg45 . Предыдущая версия .
Re[5]: 3/4 vs 0.75
От: xma  
Дата: 02.07.21 18:03
Оценка:
Здравствуйте, rg45, Вы писали:

R>По-крайней мере, настолько тупых ответов, как у тебя здесь ни у кого больше нет. Ты единственный отличился.


сколько ты получаешь, о мега специалист ? (а по совместительству — капитан очевидность, который с умным видом рассказывает
Автор: rg45
Дата: 01.07.21
— что 4 байта (float) не могут представлять бесконечное число значений как ты допёр то только до этого ? )

а то тут
Автор: xma
Дата: 03.03.21
"люди" — всю Вселенную уже по полочкам разложили (на основе принципиальной неразличимости больше некоторого максимального числа уникальных Вселенных — через экран монитора (или любые иные цифровые интерфейсы)) ..

но коммунисты да, всегда считали себя "самыми умными" (c) — на деле по факту оказываясь самыми отсталыми ..
Re[6]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 02.07.21 18:36
Оценка:
Здравствуйте, xma, Вы писали:

xma>сколько ты получаешь, о мега специалист ?


С какого перепугу я должен это с тобой обсуждать?

xma>(а по совместительству — капитан очевидность, который с умным видом рассказывает
Автор: rg45
Дата: 01.07.21
— что 4 байта (float) не могут представлять бесконечное число значений как ты допёр то только до этого ? )

xma>а то тут
Автор: xma
Дата: 03.03.21
"люди" — всю Вселенную уже по полочкам разложили (на основе принципиальной неразличимости больше некоторого максимального числа уникальных Вселенных — через экран монитора (или любые иные цифровые интерфейсы)) ..

xma>но коммунисты да, всегда считали себя "самыми умными" (c) — на деле по факту оказываясь самыми отсталыми ..

Не мороси, истеричка.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 02.07.2021 18:37 rg45 . Предыдущая версия .
Re[7]: 3/4 vs 0.75
От: xma  
Дата: 02.07.21 18:48
Оценка:
Здравствуйте, rg45, Вы писали:

R>Не мороси, истеричка.


уровень дискуссии, который ты способен поддержать понятен ..

чё, расскажи как на духу — на нормальную то работу, коммунистов не берут, да ?
Re[8]: 3/4 vs 0.75
От: rg45 СССР  
Дата: 02.07.21 18:50
Оценка:
Здравствуйте, xma, Вы писали:


xma>уровень дискуссии, который ты способен поддержать понятен ..

xma>чё, расскажи как на духу — на нормальную то работу, коммунистов не берут, да ?

Ну, допустим. Дальше что?
--
Справедливость выше закона. А человечность выше справедливости.
Re[4]: все зависит
От: Je suis Mamut  
Дата: 02.07.21 21:35
Оценка:
УП>Правильно. Но можно быть точнее, вдруг делает лишь какое-то подмножество из допустимого.
ну да, я лентяй
Re[9]: 3/4 vs 0.75
От: ути-пути Россия  
Дата: 02.07.21 21:37
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Хватит, а.

H>Кто первый перестанет — тот умнее

А вот и подстрекатель!
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[8]: 3/4 vs 0.75
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 03.07.21 00:00
Оценка:
xma> расскажи как на духу — на нормальную то работу, коммунистов не берут, да ?

А ты представь, что он купил 50000 биткоинов в 2009-м году, когда они стоили по одному центу.
Деньги для него сейчас не проблема, но рассказывать он тебе об этом не сможет и не будет.
Какая тогда у него будет на твои слова реакция?
Re: 3/4 vs 0.75
От: vsb Казахстан  
Дата: 03.07.21 04:22
Оценка:
Надо изучить формат float и засунуть туда битами что ты хош. В первом приближении можно просто два 16-битовых числа засунуть. Вроде никому от этого плохо не должно быть.
Re[3]: 3/4 vs 0.75
От: Hobbes Россия  
Дата: 04.07.21 11:13
Оценка:
Здравствуйте, pugv, Вы писали:

P>А sizeof(float) == sizeof(void*) всегда?


Нет, конечно. float, как правило, 32-битный IEEE 754, а размер указателя на 64-битных архитектурах 64 бита.
Re[2]: 3/4 vs 0.75
От: vfedosov  
Дата: 04.07.21 12:31
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Здравствуйте, Homunculus, Вы писали:


H>>Мне надо в числовой тэг объекта (float) запихнуть два числа.

S>Запихни туда адрес объекта, содержащего нужное тебе в удобном формате. Да, надо будет подпрыгнуть в приседе чтобы из float получить адрес, добраться до объекта и так далее. Зато работать потом будет удобно.
Если уж кастить, то почему не к двум short — 2x2 bytes (если, конечно, 2 байта достаточно для индекса)? Тогда будет меньше проблем с сериализацией к примеру. Хотя все равно о кроссплатформенности можно забыть. Ранее предложенное решение по взаимно-однозначному отображению рациональных чисел на целые гораздо интереснее, если индексы не должны быть сильно большими.
Я бы вообще не советовал использовать tag c float, а поискать решение получше. Выглядит стремно, нечитабельно, наверняка приведет к проблемам в будущем — как и все подобные хаки. В общем лучше иметь отдельную мапу Object2Info и через нее получать все дополнительные данные.
Re: 3/4 vs 0.75
От: Sharov Россия  
Дата: 04.07.21 14:54
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Другими словами, например дробь 3/4 — содержит эту информацию — у нас как бы третий объект из четырех.

H>А вот та же самая дробь в другом представлении — 0.75 — уже эту информацию теряет.

Вроде выше советловали в битах кодировать: кол-во бит -- всего число элементов, и далее по обычным
правилам двоичной арифметики представить соотв. число. Т.е. работать с бинарным массивом.
Кодом людям нужно помогать!
Re[3]: 3/4 vs 0.75
От: Sheridan Россия  
Дата: 05.07.21 08:29
Оценка:
Здравствуйте, vfedosov, Вы писали:

V>Я бы вообще не советовал использовать tag c float, а поискать решение получше. Выглядит стремно, нечитабельно, наверняка приведет к проблемам в будущем — как и все подобные хаки. В общем лучше иметь отдельную мапу Object2Info и через нее получать все дополнительные данные.

Совершенно согласен.
Matrix has you...
Re: 3/4 vs 0.75
От: Vladek Россия Github
Дата: 05.07.21 10:09
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Мне надо в числовой тэг объекта (float) запихнуть два числа. Номер объекта в некоем массиве, но еще и каждый объект по тегу должен знать а какой он из скольки.


Похожий приём с указателями так и называется: tagged pointer. С обычными числами гуглится такое: https://abchatra.github.io/TaggedFloat/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.