Алгоритм упрощения десятичной дроби - PullRequest
42 голосов
/ 26 февраля 2011

Я попытался написать алгоритм, упрощающий десятичную дробь, и понял, что это не слишком просто. Удивительно, но я посмотрел в Интернете и все коды, которые я нашел, где либо слишком долго, либо не работал бы в некоторых случаях. Что еще более раздражало, так это то, что они не работали на повторяющиеся десятичные дроби. Мне было интересно, однако, будет ли здесь математик / программист, который понимает все вовлеченные процессы в упрощении десятичной дроби до дроби. Кто-нибудь?

Ответы [ 22 ]

0 голосов
/ 26 февраля 2011

Вот алгоритм, реализованный в VB, который преобразует десятичную с плавающей запятой в целочисленную дробь , которую я написал много лет назад.

В основном вы начинаете с числителя = 0 и знаменателя = 1,затем, если частное меньше десятичного ввода, добавьте 1 к числителю, а если частное больше десятичного ввода, добавьте 1 к знаменателю.Повторяйте, пока не достигнете желаемой точности.

0 голосов
/ 24 июня 2013

Если бы я был на вашем месте, я бы справился с проблемой "нет повторяющихся десятичных знаков в .NET", если бы он преобразовывал строки с повторением, помеченным каким-либо образом.

например. 1/3 можно представить как «0.R3» 1/60 можно представить как «0,01R6»

Я бы потребовал явного приведения из двойного или десятичного числа, потому что такие значения можно было преобразовать только в дробную часть, которая была близка. Неявное приведение от int в порядке.

Вы можете использовать структуру и хранить свою дробь (f) в двух длинных p и q, таких что f = p / q, q! = 0 и gcd (p, q) == 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...