Ésta no es una respuesta completa, pero algunas sugerencias:
Nota: Estoy usando "s" para el factor de escala, y "x" para los dobles.
Antes que nada, pregúntate si la fuerza bruta no funciona. P.ej. intente s = 1, luego s = 2, luego s = 3, etc.
Tenemos una lista de números x [i], y una tolerancia t = 1/10. Queremos encontrar los enteros positivos más pequeños, de modo que para cada x [i], hay un número entero q [i] tal que | s * x [i] - q [i] | < t.
En primer lugar, tenga en cuenta que si podemos producir una lista ordenada para cada x [i], es bastante simple combinarlas para encontrar las más pequeñas que funcionen para todas ellas. En segundo lugar, tenga en cuenta que la respuesta depende solo de la parte fraccional de x [i].
Reorganizando la prueba anterior, tenemos | x - q/s | < t/s. Es decir, queremos encontrar una "buena" aproximación racional para x, en el sentido de que la aproximación debería ser mejor que t/s. Los matemáticos han estudiado una variante de esto donde el criterio para "bueno" es que tiene que ser mejor que cualquiera con un valor de "s" más pequeño, y la mejor manera de encontrarlos es mediante truncamientos del continued fraction expansion.
Desafortunadamente, esto no es exactamente lo que necesita, ya que una vez que se encuentra bajo su tolerancia, no necesariamente tiene que seguir mejorando - la misma tolerancia funcionará. La siguiente cosa obvia es usar esto para saltar al primer número que funcionaría, y hacer fuerza bruta desde allí. Desafortunadamente, para cualquier número, el más grande que el primero puede ser es el 5, por lo que no te compra tanto. Sin embargo, este método te encontrará que funciona, pero no el más pequeño. ¿Podemos usar esto para encontrar uno más pequeño, si existe? No lo sé, pero establecerá un límite superior para el forzamiento bruto.
Además, si necesita que la tolerancia para cada x sea < t, significa que la tolerancia para el producto de todo x debe ser < t^n. Esto podría permitirle adelantarse mucho y establecer un límite inferior razonable para el forzamiento bruto.
El factor de escala no es necesario un número entero o una potencia de diez, ¿verdad? – Vlad
¿Cuál sería el valor de x para el ejemplo anterior? –
Por cierto, el factor de escala positivo más pequeño es cero. ¿Deberíamos considerar los negativos también? – Vlad