Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Десятичная дробь в обычную, Как? 
:(
    Опции темы
tishaishii
Дата 2.3.2007, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Как преобразовать десятичную дробь в простую?
Ну метод подбора, но он чересчур долгим может быть.
А есть что-то, чтоб по-быстрому?

Это сообщение отредактировал(а) tishaishii - 2.3.2007, 00:29
PM MAIL ICQ Skype   Вверх
Тьма
Дата 2.3.2007, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 22.1.2005
Где: Украина, Винница

Репутация: нет
Всего: 4



я думаю так:
берем десятичную дробь ну допустим 1.234 преобразовываем ее в дробь вида 1234/1000, дальше находим наименьший наибольший общий делитель для этой пары чисел, и делим числитель и знаменатель на НОД

Это сообщение отредактировал(а) Тьма - 2.3.2007, 00:50


--------------------
Vir magni ingenii                 
PM MAIL ICQ   Вверх
skyboy
Дата 2.3.2007, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



tishaishii, только имей в виду, что такое преобразование будет не совсем корректно: исходной дробью для значения 0.33333333 могло быть как 1/3, так и 33333333/100000000. 
PM MAIL   Вверх
SelenIT
Дата 2.3.2007, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: нет
Всего: 401



Ух, помнится, в "Календаре школьника" за далекий 1988 год был шикарный алгоритм для этой задачи в стихотворном виде (для исполнения вручную на пару с обычным калькулятором). Сейчас попытаюсь его воспроизвести по памяти:

Часть 1.
Код

ЕСЛИ ты соображаешь,
Что число не так малО, // т.е. не что-то вроде 0.0000000213 из-за ошибки округления
ТО бесстрашно обращаешь
Десятичное число.     // даже на советских калькуляторах той поры была кнопа 1/x
Целой частью пополняешь
Ты "волшебных" чисел стек,
С дробной же НАЗАД шагаешь,
Как упорный человек.

Часть 2.
Код

Взяв единицу в знаменатель
И ноль оставив как числитель,
Прилежно ПОВТОРЯЙ, читатель,
Дробей <какой-то> повелитель:
Число "волшебное" из стека
На знаменатель помножаешь,
Задолго до скончанья века
В числитель это прибавляешь,
Переставляешь с неохотой
Числитель ты и знаменатель,
И ЕСЛИ в стеке есть хоть что-то,
ТО ВОЗВРАЩАЕШЬСЯ, читатель!


ПыСы: smile  нихрена себе однако в то время у меня память была... эх, куда что делось...
ПыПыСы: а вот фамилию автора этой прелести не вспомню... возможно, она была только мелким шрифтом на последней странице обложки ("Авторский коллектив: ... и т.д."), куда я в ту пору "по увлеченности" не смотрел. А жалко... там еще был алгоритм нахождения НОД им. Евклида, тоже в стихах...



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
V.A.KeRneL
Дата 2.3.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 1
Всего: 14



SelenIT, э-э-э, что-то у меня с рифмованными алгоритмами не очень, похоже. Я не понял! :-( А можно перевести [для особо одарённых] с советского стихотворного на русский прозаический?

Добавлено @ 09:41 
Цитата(skyboy @  2.3.2007, 00:59 Найти цитируемый пост)

tishaishii, только имей в виду, что такое преобразование будет не совсем корректно: исходной дробью для значения 0.33333333 могло быть как 1/3, так и 33333333/100000000.

Да-да! Именно, из-за этого обычно подразделяют эти две задачи: перевод конечной десятичной дроби (рационального числа) в обыкновенную дробь и бесконечного (но периодического) ---//---.



--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
maxim1000
Дата 2.3.2007, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 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
PM WWW   Вверх
corpsehunter
Дата 2.3.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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 показал отрицательный результат...
PM MAIL   Вверх
MBo
Дата 2.3.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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

PM MAIL   Вверх
tishaishii
Дата 2.3.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Всё ОК, ищу я самый большой делитель, но правильно ли я определил знаменатель?
Вот, например, мантисса отлично делится на 17, так может быть надо было выбирать в качестве знаменателя что-то другое?
Вот какова вероятность, что в числителе появится число с последней цифрой 2, 5 или 0? Надо бы подсчитать, плохо помню теорию вероятностей, но задача следующая:
допустим, я имеюю поток сообщений из 16-значных чисел, причём цифры в 16-значных числах выбираются по равномерному распределнию, вот какова вероятность, что следующее число будет иметь в конце цифру 2, 5 или 0?
Хотелось бы ответ и на это. Но думаю, что 1/10+1/10+1/10=30%. Но какова вероятность того, что в результате числитель и знаменатель снова сократятся? И так далее, до 16го колена.
Мне надо на выходе как можно короче.

Так что надо как-то по-гибче.

Ну что, интереснее стало? smile)) Задачка ещё та.

Это сообщение отредактировал(а) tishaishii - 2.3.2007, 19:16
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0705 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.