![]() |
|
![]() ![]() ![]() |
|
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
Как преобразовать десятичную дробь в простую?
Ну метод подбора, но он чересчур долгим может быть. А есть что-то, чтоб по-быстрому? Это сообщение отредактировал(а) tishaishii - 2.3.2007, 00:29 |
|||
|
||||
Тьма |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 22.1.2005 Где: Украина, Винница Репутация: нет Всего: 4 |
я думаю так:
берем десятичную дробь ну допустим 1.234 преобразовываем ее в дробь вида 1234/1000, дальше находим наименьший наибольший общий делитель для этой пары чисел, и делим числитель и знаменатель на НОД Это сообщение отредактировал(а) Тьма - 2.3.2007, 00:50 -------------------- Vir magni ingenii |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
tishaishii, только имей в виду, что такое преобразование будет не совсем корректно: исходной дробью для значения 0.33333333 могло быть как 1/3, так и 33333333/100000000.
|
|||
|
||||
SelenIT |
|
||||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: нет Всего: 401 |
Ух, помнится, в "Календаре школьника" за далекий 1988 год был шикарный алгоритм для этой задачи в стихотворном виде (для исполнения вручную на пару с обычным калькулятором). Сейчас попытаюсь его воспроизвести по памяти:
Часть 1.
Часть 2.
ПыСы: ![]() ПыПыСы: а вот фамилию автора этой прелести не вспомню... возможно, она была только мелким шрифтом на последней странице обложки ("Авторский коллектив: ... и т.д."), куда я в ту пору "по увлеченности" не смотрел. А жалко... там еще был алгоритм нахождения НОД им. Евклида, тоже в стихах... -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
||||
|
|||||
V.A.KeRneL |
|
|||
![]() Vadim A. Kazantsev ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 3.12.2006 Где: Moscow, Russia Репутация: 1 Всего: 14 |
SelenIT, э-э-э, что-то у меня с рифмованными алгоритмами не очень, похоже. Я не понял! :-( А можно перевести [для особо одарённых] с советского стихотворного на русский прозаический?
Добавлено @ 09:41 Да-да! Именно, из-за этого обычно подразделяют эти две задачи: перевод конечной десятичной дроби (рационального числа) в обыкновенную дробь и бесконечного (но периодического) ---//---. -------------------- «C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы» ---/)/)---(\.../)---(\(\ --(':'=)---(=';'=)---(=':') (")(")..)-(").--.(")-(..(")(") |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
1. непериодические дроби отбрасываем сразу, т.к. они не представляются дробями целых чисел
2. выделяем начальную часть (до начала периода) - это конечная десятичная дробь, её умножаем на 10 в нужной степени и его же ставим в знаменатель 3. часть с периодом представляем в виде суммы геометрической прогрессии и считаем её сумму пример для 1.232222222... 1.23=123/100 0.0022222...=0.001*2.2222222...=2.22222/1000 x=2.222222... x=2+x/10 9*x=2*10 x=20/9 вот и получается 1.2322222...=123/100+20/9000 ну а дальше - сокращать и приводить к одному знаменателю Добавлено @ 14:07 правда, из-за представления чисел в компьютере могут возникнуть проблемы если я не ошибаюсь, компьютер хранит только те дроб, которые в двоичной системе конечные (остальные - усекает) -------------------- qqq |
|||
|
||||
corpsehunter |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 199 Регистрация: 24.2.2007 Репутация: нет Всего: 3 |
Че-то ты как-то сложно намутил или я не понял Вот как это считается:
Возмем ту же дробь. С непереодичной частью все нормально. Рассмотрим переодичную: 0.002222222 = 0.002 + 0.0002 + 0.00002 + .... Это, как ты сказал, сумма геометрической прогрессии: первый член а1 = 0.002, а знаменатель q = 0.1, так как каждый член получается из предыдущего умножением на него. Формула для суммы: S = a1 / (1-q) = 0.002 / (1-0.1) = 0.002 / 0.9 = 2 / 900 И прибавляем непереодическую часть p.s. эта формула справедлива только для бесконечно убывающей геометрической последовательности. --------------------
Тест на IQ показал отрицательный результат... |
|||
|
||||
MBo |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 5 Всего: 18 |
не обязательн отделять непериод. часть
X = 1.230909(09) Длина периода 2, делим на 10^2 = 100 X/100 = 0.0123(09) вычитаем X-X/100 = X* 99/100= 1.2186 = 12186/10000 X = 12186/(99*100) и сокращаем 1354/1100 = 677/550 = 1 127/550 |
|||
|
||||
tishaishii |
|
|||
![]() Создатель ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1262 Регистрация: 14.2.2006 Где: Москва Репутация: нет Всего: 8 |
Всё ОК, ищу я самый большой делитель, но правильно ли я определил знаменатель?
Вот, например, мантисса отлично делится на 17, так может быть надо было выбирать в качестве знаменателя что-то другое? Вот какова вероятность, что в числителе появится число с последней цифрой 2, 5 или 0? Надо бы подсчитать, плохо помню теорию вероятностей, но задача следующая: допустим, я имеюю поток сообщений из 16-значных чисел, причём цифры в 16-значных числах выбираются по равномерному распределнию, вот какова вероятность, что следующее число будет иметь в конце цифру 2, 5 или 0? Хотелось бы ответ и на это. Но думаю, что 1/10+1/10+1/10=30%. Но какова вероятность того, что в результате числитель и знаменатель снова сократятся? И так далее, до 16го колена. Мне надо на выходе как можно короче. Так что надо как-то по-гибче. Ну что, интереснее стало? ![]() Это сообщение отредактировал(а) tishaishii - 2.3.2007, 19:16 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |