| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Деление меньшего на большее |
| Автор: GIK 28.12.2007, 10:12 |
| Всем доброго времени суток. Народ, кто знает как реализовать побитово деление меньшего числа на большее? ОЧЕНЬ НАДО. |
| Автор: maxim1000 28.12.2007, 11:16 |
| и что должно получиться в результате? (т.е. в каком формате) |
| Автор: Akina 28.12.2007, 11:20 |
| Тупо ноль и меньшее в остатке. |
| Автор: GIK 28.12.2007, 11:23 | ||||
Я написал алгоритм деления больших чисел, нереально больших, до 1000 символов, правда там еще учесть кое что надо, вот он:
А мне нужно знать ка разделить например 2/7, и вывести хотябы 2 символа после запятой, люди помогите пожалуста еще 3 часа осталось :( Добавлено через 9 минут и 39 секунд
В любом, хоть что нибудь, все пойдет |
| Автор: maxim1000 28.12.2007, 11:57 |
ну необязательно же нацело я потом и спросил формат, что задание предполагает дробное число самое простое, что приходит в голову: числа с фиксированной запятой принцип такой: умножаем число на коэффициент и округляем - тогда его можно хранить, как обычное целое число (хотя, конечно, ещё нужно учесть, чтобы оно не оказалось слишком большим по модулю) ну а при обработке учитываем, что, на самом деле, это не само число, а умноженное выбор множителя зависит от нескольких условий: 1. нужно, чтобы умноженное число не вылезло из диапазона ячейки, в которой его собираются хранить, т.е. если у нас числа 0<=x<1 и хранить будем в байте, вполне подойдёт множитель 256 2. если известно, что числа будут не больше какого-то максимума, то множитель стоит брать наибольший из возможных, чтобы получить наилучшую точность 3. [это, скорее, специфично для данной задачи] простота: если уж хочется просто выводить число в 10-й системе, то можно взять множитель 10^n, соответственно, можно будет хранить n знаков после запятой и выводить их |
| Автор: Akina 28.12.2007, 13:12 |
2/7 = ((2 shl 8)/7) shr 8 |
| Автор: GIK 3.1.2008, 12:33 |
| Чет не догоняю вообще ребят, ваши советы Мне тут по пьяне пришла в голову вот такая мысль: По сути когда делим меньшее число на большее, это есть деление КАЖДОЙ ЕДЕНИЦЫ из меньшего числа умноженное на количество этих едениц, т.е. само число. Пример 7/26 это 1/26, 7 раз Я не могу хранить (или не умею) дроби, зато я могу хранить целы числа! А как мне это сделать? Оказывается очень просто- вместо 1-цы ставим 100 (в данном случае, т.к. делитель 26) в результате 100/26 = 3,84 (округляем) = 3. Теперь умножаем на 7 = 21. Проверим на калькуляторе 7/26 = 0,26 а у нас 21 - разница большая... Значит надо как то уменьшить погрешность. Разделтим теперь 10000 / 26 = 384,61 = 384 *7 = 2688 Сравниваем 7/26=0,2692, а у нас 2688. Видим что это вариант имеет меньшую погрешность. На данный момент это мне подходит т.к. для моей задачи мне достаточно знать 2 знака после запятой. Но конечно хотелось бы знать как считает калькулятор |
| Автор: maxim1000 3.1.2008, 12:51 |
| но ведь гораздо проще взять 700/26 и поставить запятую, где надо |