Функция крыс Matlab на языке C
Знаете ли вы, как сделать рациональную аппроксимацию десятичного числа в C (аналогично функции Matlab крысы)?
Обновить
Если мы хотим P/Q-аппроксимацию двойного числа, быстрое решение может быть следующим:
int factor=1000000;
P=floor(number*factor);
Q=factor;
Ошибка меньше (число / коэффициент), что незначительно.
2 ответа
Непрерывные дроби можно использовать для расчета рациональных приближений к действительным в некотором смысле действительным числам. Таким образом, с вводом 0.33333333 у вас есть шанс получить 1/3 вместо 3333/10000.
Вы можете сделать то же самое, что и в своем обновлении, но затем проверить наибольший общий коэффициент между верхом и низом и упростить. Например, 0.5
будет идти к 500000/1000000
делаю это вашим методом. Они имеют общий фактор 500000
так что вы можете разделить верх и низ на это, чтобы получить 1/2
, У Google есть много примеров функций hcf, таких как эта (Редактировать: И этот впечатляющий список).