Эмуляция
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
8) Прошу помочь решить задачу
Написать ф-ю, которая на входе имеет 2 числа с плавающей точкой типа FLOAT, но представленные как LONG INT UNSIGNED ивыдаёт результат типа FLOAT.Сумма или разность - 3ий операнд.
8)
Написать ф-ю, которая на входе имеет 2 числа с плавающей точкой типа FLOAT, но представленные как LONG INT UNSIGNED ивыдаёт результат типа FLOAT.Сумма или разность - 3ий операнд.
8)
Какая-то задача притянутая за уши.
Поподробнее плз.
Поподробнее плз.
Усложнять - легко, упрощать - сложно
Канает такая подсказка:
в unsigned long int помещается число типа float в следующем виде:
запятая, естественно, отбрасывается.
После этого производится операция над двумя переданными числами (сложение отдельно того, что до запятой, и того, что после запятой) и складывается обратно (запятая вставляется в нужное место), например, через массив символов и atof()... 8)
в unsigned long int помещается число типа float в следующем виде:
Код: Выделить всё
struct {
unsigned int <До запятой>;
unsigned int <После запятой>;
}
запятая, естественно, отбрасывается.
После этого производится операция над двумя переданными числами (сложение отдельно того, что до запятой, и того, что после запятой) и складывается обратно (запятая вставляется в нужное место), например, через массив символов и atof()... 8)
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Ну если число с плавающей запятой в данной текущей задаче запаковано именно так (конечно же это не системное представление), то алгоритм следующий.
Целые части просто складываем и записываем в целую часть результата. Дробные части сначала выравниваем (то бишь умножаем на 10 соответствующее число до тех пор, пока числа не станут одного порядка) и тоже складываем. Если результат отличается порядком от слагаемых, отбрасываем старшую цифру и инкрементируем целую часть результата, после этого получившееся число записываем в дробную часть результат. Всё.
P.S. Порядок числа (иными словами количество знаков) можно вычислить по следующей формуле:
<Целая часть>(log10 (Число)) + 1.
Целые части просто складываем и записываем в целую часть результата. Дробные части сначала выравниваем (то бишь умножаем на 10 соответствующее число до тех пор, пока числа не станут одного порядка) и тоже складываем. Если результат отличается порядком от слагаемых, отбрасываем старшую цифру и инкрементируем целую часть результата, после этого получившееся число записываем в дробную часть результат. Всё.
P.S. Порядок числа (иными словами количество знаков) можно вычислить по следующей формуле:
<Целая часть>(log10 (Число)) + 1.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Ни фига это не float. Ни в каком приближении. Если тебе это надо как ты написал, то надо писать "число с фиксированной запятой".в unsigned long int помещается число типа float в следующем виде:
А складывать их лучше как числа типа long long или _int64.
2B OR NOT(2B) = FF
Короче понятно , что нифига не понятно. Если кто знает как решать оригинал то HELP.
--------------------------------------------------------------------------
А разве нельзя все сложить попарно, потом загнать в строки(и добавить между ними запятую) и весь получившийся каламбур переконвертировать в float/
--------------------------------------------------------------------------
Сначала написал, а потом подумал
Отпадает. Этот алгоритм гораздо сложнее, чем предложил Romeo и чем кажется на первый взгляд/ Да и вообще не ясно, можно ли его реализовать.
А разве нельзя все сложить попарно, потом загнать в строки(и добавить между ними запятую) и весь получившийся каламбур переконвертировать в float/
--------------------------------------------------------------------------
Сначала написал, а потом подумал

Усложнять - легко, упрощать - сложно
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
regromus, тебе не понравилось моё решение? Или тебе нужны ещё варианты? Могу тебя обрадовать: вариантов больше нет.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.