Страница 1 из 1

Эмуляция

Добавлено: 17 мар 2005, 10:49
regromus
8) Прошу помочь решить задачу
Написать ф-ю, которая на входе имеет 2 числа с плавающей точкой типа FLOAT, но представленные как LONG INT UNSIGNED ивыдаёт результат типа FLOAT.Сумма или разность - 3ий операнд.
8)

Добавлено: 17 мар 2005, 12:17
Hup
Какая-то задача притянутая за уши.
Поподробнее плз.

Добавлено: 17 мар 2005, 12:28
regromus
Канает такая подсказка:

в unsigned long int помещается число типа float в следующем виде:

Код: Выделить всё

struct {
 unsigned int <До запятой>;
 unsigned int <После запятой>;
}

запятая, естественно, отбрасывается.
После этого производится операция над двумя переданными числами (сложение отдельно того, что до запятой, и того, что после запятой) и складывается обратно (запятая вставляется в нужное место), например, через массив символов и atof()... 8)

Добавлено: 17 мар 2005, 13:14
Romeo
Ну если число с плавающей запятой в данной текущей задаче запаковано именно так (конечно же это не системное представление), то алгоритм следующий.

Целые части просто складываем и записываем в целую часть результата. Дробные части сначала выравниваем (то бишь умножаем на 10 соответствующее число до тех пор, пока числа не станут одного порядка) и тоже складываем. Если результат отличается порядком от слагаемых, отбрасываем старшую цифру и инкрементируем целую часть результата, после этого получившееся число записываем в дробную часть результат. Всё.

P.S. Порядок числа (иными словами количество знаков) можно вычислить по следующей формуле:
<Целая часть>(log10 (Число)) + 1.

Добавлено: 17 мар 2005, 13:27
Absurd
в unsigned long int помещается число типа float в следующем виде:
Ни фига это не float. Ни в каком приближении. Если тебе это надо как ты написал, то надо писать "число с фиксированной запятой".
А складывать их лучше как числа типа long long или _int64.

Добавлено: 17 мар 2005, 13:59
regromus
Короче понятно , что нифига не понятно. Если кто знает как решать оригинал то HELP.

Добавлено: 17 мар 2005, 14:30
Hup
--------------------------------------------------------------------------
А разве нельзя все сложить попарно, потом загнать в строки(и добавить между ними запятую) и весь получившийся каламбур переконвертировать в float/
--------------------------------------------------------------------------

Сначала написал, а потом подумал :) Отпадает. Этот алгоритм гораздо сложнее, чем предложил Romeo и чем кажется на первый взгляд/ Да и вообще не ясно, можно ли его реализовать.

Добавлено: 17 мар 2005, 16:21
Romeo
regromus, тебе не понравилось моё решение? Или тебе нужны ещё варианты? Могу тебя обрадовать: вариантов больше нет.