реклама на сайте
подробности

 
 
> Преобразовать число с плавающей точкой в простую дробь., Нужен оптимальный алгоритм пересчета
M_Andrey
сообщение Jun 8 2016, 12:56
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 15-10-07
Из: Й-Ола
Пользователь №: 31 376



Встала задача преобразовать число single/double в простую дробь.
Классическое правило:
1.2345 = 12345 / 10000
Находим наибольший общий делитель НОД(12345,10000)=5 и сокращаем дробь:
12345 / 10000 = 2469 / 2000
Еще нашел способ:
CODE
d = 0.12345; // Исходная дробь, может быть любой
a0 = 0; a1 = 1; b0 = 1; b1 = 0;
while(не_достигнута_нужная точность)
{
N = Floor(d);
a = N * a1 + a0;
b = N * b1 + b0;
printf("%d / %d = %f\n", a, b, a/b);
a0 = a1; a1 = a; b0 = b1; b1 = b;
d = 1/(d - N);
}

Первый способ дает неоптимальные числа (слишком большие) при той-же точности, у второго в алгоритме есть дыры типа деления на ноль. Может кто-то уже проходил этот путь? Что посоветуете?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- - _pv   для чего, если не секрет? 1.2345 = 1.2345 / 1 = 2...   Jun 8 2016, 13:46
|- - M_Andrey   Цитата(_pv @ Jun 8 2016, 16:46) для чего,...   Jun 8 2016, 13:57
|- - Maverick   Цитата(M_Andrey @ Jun 8 2016, 16:57) Нужн...   Jun 8 2016, 14:00
|- - M_Andrey   Если-бы мне надо было сделать это один раз, то я б...   Jun 8 2016, 14:12
|- - _pv   Цитата(M_Andrey @ Jun 8 2016, 21:12) эти ...   Jun 8 2016, 14:52
- - Tanya   Цитата(M_Andrey @ Jun 8 2016, 15:56) Вста...   Jun 8 2016, 15:05
|- - M_Andrey   Цитата(Tanya @ Jun 8 2016, 18:05) https:/...   Jun 8 2016, 16:19
|- - Maverick   Цитата(M_Andrey @ Jun 8 2016, 19:19) Не п...   Jun 9 2016, 05:21
|- - M_Andrey   Цитата(M_Andrey @ Jun 8 2016, 19:19) PS. ...   Jun 9 2016, 07:29
- - jcxz   Цитата(M_Andrey @ Jun 8 2016, 18:56) Вста...   Jun 9 2016, 08:25
|- - M_Andrey   Цитата(jcxz @ Jun 9 2016, 11:25) Теперь р...   Jun 9 2016, 09:04
||- - jcxz   Цитата(M_Andrey @ Jun 9 2016, 15:04) А ка...   Jun 9 2016, 09:52
|- - XVR   Цитата(jcxz @ Jun 9 2016, 11:25) Теперь р...   Jun 10 2016, 08:47
|- - jcxz   Цитата(XVR @ Jun 10 2016, 14:47) Это ровн...   Jun 10 2016, 08:52
- - XVR   Его не устроил результат, и он хочет дроби поменьш...   Jun 10 2016, 09:05


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 03:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01257 секунд с 7
ELECTRONIX ©2004-2016