#4
by Бешенная Нога
ели дробь вида 1/151 ты ее никогда не приведешь к виду х/81, чтобы х - было целое число
#5
by Широкий
в цикле по значениям от 0 до 9 перебирай - смотришь имеет ли числитель и знаменатель общие делители - есть сокращает - снова цикл ... и т.д приведешь дробь 1234/1000 к другому виду
#7
by Mort
Десятичная дробь значит что в знаменатель всегда кратен только простым 2 и 5. Пока числитель делится на 2 или 5 дели. Когда не будет делится считай нашёл.
#12
by NS
Если сократить дробь, то а/б = (а / НОД(а,б)) / (в / НОД(а,б)) // Но есть еще способы приближенного сокращения дроби с данной точностью.
#28
by Lyolik
Большое спасибо за мысли. Хочу уточнить условие. Есть дробь 1/6 преобразуем в десятичную = 0,1666666666666... ее опять нужно преобразовать в 1/6 а не в 833/5000.
#29
by NS
Это уже алгоритмы приближенного преобразования... Сейчас попробую вспомнить - что-то сомения у меня возникают, что в инете это есть...
#33
by miki
Вот еще был вариант, через приближения. Код не претендует на оптимальность. ПисАлось по просьбе чела "очень срочно" за время в одну банку пива. Сначала были мысли доработать, но всё некогда. Находит ближайшую дробь с двухзначным знаменателем (кому надо больше - замените 99 на 99скольконадораз, можно переделать, чтобы max кол-во разрядов знаменателя передавать как параметр). //*********************************** For _Знам=2 To 99 Do For _Числ=1 To (_Знам-1) Do Вариант=_Числ/_Знам; If Вариант>ДесЧасть Then If Eps1<Eps Then
#38
by miki
Возвращает только неправильные дроби, т. е. не выделяет целую часть. Чётных знаменателей не будет. => точность может быть ниже, чем в . Согласен полностью.
#43
by miki
Теряешь целую часть. Для числа нач=3.14159265; Вариант возвращает 314159/100000 Вариант возвращает 3 16/113
#44
by NS
Ничего я не теряю. Я показываю как преобразовать дробную часть. Напиши Сообщить(""+цел(нач)+" "+... а тут что было написано...);
#46
by lisss
целую часть выделять не просили.... "Чётных знаменателей не будет. => точность может быть ниже, чем в ." ЭТО ТЫ ОТКУДА ВЗЯЛ????
#47
by NS
Расслаютесь. В "Правильный" алгоритм, которому уже несоклько веков. Читал в библиотечке "Квант" (вроде, хотя еще брошурки таки тонкие были, не помню как назывались, может в них) ЗЫ. Во у меня пямять! ;-))
#51
by NS
Вначале - смотри (1,2) Видишь 10/81? Это не сокращение десятичной дроби, а представление иррационального числа в виде десятичной дроби (приближения) - в общем случае.
#54
by Lyolik
NS большое спасибо, проверяю на базе клиента. А ограничение 100 или 1000 выставлю в константе. Практика покажет как лучше.
#57
by NS
Но в принципе это не нужно, так как при маленькой дельте на следующем шаге и числитель и знаменатель вырастут в очень много раз.
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям
В этой группе 1С
- ЗиК выгрузить данные в налогоплательщик
- Спорю с отделом кадров. Как правилно принимать ранее уволенных сотрудников.
- Как программно узнать сколько месяцев в интервале?
- 8.0: как программно провести сохранение файла в хранилище значений БД?
- Как узнать количество страниц для печати из 1С 7.7 ?
- v8. Покупка УПП
- Как программно встать на нужную строку в ТЧ документа в 8ке
- Изменить шаблон кода в плане счетов
- v7 Как программно из 1С пересохранить лист Экселя в формате Дбф
- Объединить два отчета в один в 8.0
- 4-х значный год в 1с 7.7
- Как можно изменить цвет текста в колонке формы списка справочника?
- Подскажите,пожалуйста если способ обнулить регистры по определеную дату.
- УПП, спр. Помещения
- Есть ли в комплексной "расчетная ведомость", как в 1С:Бух
- появилась необходимость выгрузить данные из 1С в xml формате, чтобы потом э
- Как вызвать форму редактирования списка значений
- Получение данных из внешней формы в документ
- Посоветуйте IDE для vbscript
- Ошибка. Не удалось открыть файл 1SSTREAM