H>Можно конечно использовать разряды. Например 3/4 зашифровать в 3004. Но может красивше есть решение?
Распихать по битикам — это ж самое естественное. Только не забывай, у тебя не все варианты доступны — много NaN-ов и тебе их с высокой вероятностью превратят в один единственный вариант NaN-а.
Здравствуйте, Homunculus, Вы писали:
H>Дело не в том, что надо заказчику, а в том, какой инструментарий предоставляет некий движок. А предоставляет он float тэг
1. Попытка натянуть сову на глобус. Заказчик тут очень важен. Завтра он тебе скажет хранить строку, ты её тоже во float пихать будешь?
2. В данном случае единственный (вроде) вариант: первое число хранить до точки, второе — после. Но не знаю, как float с этим справится.
Здравствуйте, Homunculus, Вы писали:
Pzz>>Как в одно число засунуть два числя? Никак!
H>Спорное утверждение. Хочешь сказать, что "3/4" — это не "число", а "действие"?
Я хочу сказать, что 3/4, чем бы оно не было, состоит из двух независимых параметров. Технически их можно засунуть в 4 байта, если разрядов хватает дня представления обоих параметров с приемлимой точностью (например, разбросав по разрядам, не важно, в двоичной записи или в десятичной). Но оно от этого не перестанет быть двумя независимыми параметрами.
Здравствуйте, ути-пути, Вы писали:
УП>Тогда тебе плавающая точка не подходит, только в виде изначальных не сокращенных дробей.
Ну, плавющую точку от него требует его framework, а он может вполне совместить в памяти (union, reinterpret_cast и т.п.) float и пару целых чисел подходящего размера и на своей стороне работать с этой парой. Нужно только позаботиться, чтоб в NaN-ы не залетать.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Homunculus, Вы писали:
H>Как раз вопрос и был задан, потому что это и важно
Тогда и храни два числа. А как, это в зависимости в каких они пределах могут изменяться. 3004 вполне годный вариант, если для знаменателя достаточно трех десятичных разрядов. Некрасивое решение? А оно некрасивое по причине необходимости использовать float, то есть уже кривое и записью "3004" кривее/некрасивее не сделаешь.
Здравствуйте, ути-пути, Вы писали:
D>>float это нонче 64 бита же? Ну и кодируй ими два 32-битных числа, числитель и знаменатель. УП>Вроде могут быть нюансы со специальными значениями типа nan, inf и т.п.?
нам то что оно float вообще не очень интересно, поэтому и nan/inf тоже. Для нас это 64 бита, которые мы как хотим так и рассматриваем:
А, да, если этот float десериализуется из строчки, или ещё где-то участвует в операциях с плавающей точкой, тогда бОльшая беда, конечно. Тогда тупо математикой — про порядок забиыть, пользоваться мантиссой в десятичном представлении, как тс изначально писал — числитель*выбранное смещение + знаменатель.
Слуш, вопрос не в тему. Увидел твою подпись. У тебя действительно такая необычная двойная фамилия? А почему так получилось? Если я конечно не лезу не в свое дело, просто интересно. Нисколько не хотел задеть вопросом.
Здравствуйте, ути-пути, Вы писали:
УП>Вроде могут быть нюансы со специальными значениями типа nan, inf и т.п.?
И поэтому не стоит играться с битами или пытаться объединить union'ом. Нужно как и изначально предложил ТС самому себе и нам преобразовывать в целое, а его уже во float и обратно (если нужно). Оценить конечно область допустимых значений и при преобразовании из float округлять, а не отбрасывать, но эту уже капитанствую.