Я пытаюсь разместить валютные сделки, которые соответствуют точному курсу на рынке, который принимает только целые суммы заявок / предложений. Я хочу сделать максимально возможную сделку по определенной ставке. Это игрушечная программа, а не настоящий торговый бот, поэтому я использую C #.
Мне нужен алгоритм, который возвращает ответ в разумные сроки, даже если числитель и знаменатель могут быть большими (100000 +).
static bool CalcBiggestRationalFraction(float target_real, float epsilon, int numerator_max, int denominator_max, out int numerator, out int denominator)
{
// target_real is the ratio we are tryig to achieve in our output fraction (numerator / denominator)
// epsilon is the largest difference abs(target_real - (numerator / denominator)) we are willing to tolerate in the answer
// numerator_max, denominator_max are the upper bounds on the numerator and the denominator in the answer
//
// in the case where there are multiple answers, we want to return the largest one
//
// in the case where an answer is found that is within epsilon, we return true and the answer.
// in the case where an answer is not found that is within epsilon, we return false and the closest answer that we have found.
//
// ex: CalcBiggestRationalFraction(.5, .001, 4, 4, num, denom) returns (2/4) instead of (1/2).
}
Я задал предыдущий вопрос, который аналогичен (/3812531/nahozhdenie-blizhaishei-tselochislennoi-zadannomu-sluchainomu-veschestvennomu-diapazonam-chislitelya-znamenatelya), прежде чем я подумал о том, что на самом деле пытался выполнить, и оказалось, что я пытаюсь решить другую, но связанную проблему.