Re[4]: Float в не human-readable строку
От: Vain Россия google.ru
Дата: 27.06.06 11:19
Оценка: +1
Здравствуйте, saproj, Вы писали:

V>>Base64 это мощно А чем это хуже?

V>>[ccode]
V>>void ConvertToString(char* str,float f) {
V>> int* pi = (int*)&f;
S>После этой строки можно уже прекращать чтение .
V>> sprintf(str,"%08X",*pi);
S>Плохое решение. На разных платформах int может быть little-endian или big-endian.
Я может чего то непонял? Тебе так и так придётся будет подгонять float и int k разным платформам, так что пример нормальный, просто надо додумать дальше своей головой
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: Float в не human-readable строку
От: kan_izh Великобритания  
Дата: 27.06.06 11:23
Оценка:
saproj wrote:


> Зависит от задачи, конечно. Не зная точно какая задача нет смысла

> спорить. Но думаю, что вполне можно назвать извращением передачу 100 с
> лишним байт вместо 8 (float) или 12 (double) теряя при этом некоторые
> значения.
100 я написал для простоты, при необходимости можно заюзать numeric_limits<>::digits (или что-то около того) и посчитать
точное кол-во — минимальное и без потерь точности.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Float в не human-readable строку
От: Vain Россия google.ru
Дата: 27.06.06 11:36
Оценка: :)
Здравствуйте, saproj, Вы писали:

S>Зависит от задачи, конечно. Не зная точно какая задача нет смысла спорить. Но думаю, что вполне можно назвать извращением передачу 100 с лишним байт вместо 8 (float) или 12 (double) теряя при этом некоторые значения

С каких это пор у float 8 байт? А 12-байтный где взяли?.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[6]: Float в не human-readable строку
От: saproj  
Дата: 27.06.06 11:40
Оценка:
Здравствуйте, Vain, Вы писали:

S>>Зависит от задачи, конечно. Не зная точно какая задача нет смысла спорить. Но думаю, что вполне можно назвать извращением передачу 100 с лишним байт вместо 8 (float) или 12 (double) теряя при этом некоторые значения

V>С каких это пор у float 8 байт? А 12-байтный где взяли?.

float и double 4 и 8 байт соотвественно. Речь о другом. Читайте всю ветку.
Re[6]: Float в не human-readable строку
От: Константин Л. Франция  
Дата: 27.06.06 11:52
Оценка:
Здравствуйте, saproj, Вы писали:

S>Здравствуйте, Константин Л., Вы писали:


S>>>Готовую функцию, которая преобразовывает, найти несложно. Но по-моему гораздо интереснее написать самому. Там все очень просто: каждые 6 битов исходной последовательности являются индексом, по которому из массива "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" берется символ. И для 4-байтового float в конце последовательности нужно добавить "хвост" из двух '='.


КЛ>>там все по-другому


S>Что именно по-другому?


чуть сложнее, но в целом, ты прав
Re[7]: Float в не human-readable строку
От: Vain Россия google.ru
Дата: 27.06.06 12:12
Оценка: -1
Здравствуйте, saproj, Вы писали:

S>>>Зависит от задачи, конечно. Не зная точно какая задача нет смысла спорить. Но думаю, что вполне можно назвать извращением передачу 100 с лишним байт вместо 8 (float) или 12 (double) теряя при этом некоторые значения

V>>С каких это пор у float 8 байт? А 12-байтный где взяли?.
S>float и double 4 и 8 байт соотвественно. Речь о другом. Читайте всю ветку
ну, на какой платформе ты видел такие типы?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: Float в не human-readable строку
От: gear nuke  
Дата: 27.06.06 12:25
Оценка: 6 (1)
Здравствуйте, Tuo_Bellas, Вы писали:

T_B>Есть кусок кода?


http://base64.sourceforge.net/b64.c
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[8]: Float в не human-readable строку
От: Erop Россия  
Дата: 17.07.06 05:49
Оценка:
Здравствуйте, saproj, Вы писали:

S>

Если на всех твоих платформах float хранится в IEEE floating-point standard

S>А преобразовывать через int непортабельно даже при выполнении этого условия.


А как ты собираешься превращать float в строку бит?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Float в не human-readable строку
От: Кодт Россия  
Дата: 17.07.06 08:01
Оценка:
Здравствуйте, Tuo_Bellas, Вы писали:

T_B>Нужно сохранить float в строку, без потери точности, портабельно (вариант, непортабельно для PC, Win32, VC 8), причем с возможностью прочесться обратно. Human-readability строки не нужно, нужно только чтобы были "нормальные символы" (hex, наверное все же, 0-9, A-F; хотя, может и 7-bit ASCII пойдет, посмотрим).


Ну, можно воспользоваться тем сокровенным знанием, что float — это двоичное плавающее число. С неизвестной разрядностью и т.д. и т.п.
float f;

int sign = (f<0) ? -1 : (f>0) ? : +1 : 0;
if(f<0) f = -f;
// постусловие: f>=0

int power = 0;
while(f>=1.0) { f/=2; ++power; }
while(f<0.5) { f*=2; --power; }
// постусловие: 0.5<=f<1.0

long mantissa = 0;
// вот тут надо подумать, как грамотно найти мантиссу.
// может быть, завести известное число float g и методом последовательных приближений приравнять его к f
// одновременно заполняя mantissa
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.