Iba a preguntar esto en Stack Overflow, pero finalmente decidió que esto era más matemáticas de la programación. Todavía puede llegar a estar equivocado acerca de eso, pero...
Dado un número representado en binario, es bastante fácil derivar una representación decimal usando división de enteros y restos de extracto de dígitos en orden inverso. A continuación, basta con contar el número de dígitos que se extrae.
Sin embargo, me preguntaba sobre el cálculo exacto del número de dígitos decimales de manera más eficiente, evitando el cálculo de los dígitos real.
A primera vista, esto es fácil. En primer lugar, contar los dígitos binarios necesarios (es decir, determinar la posición de la mayor conjunto de bits). Muchos procesadores de someterse a una operación para hacer esto directamente, y hay poco-jugueteando algoritmos para hacer en O(log n) tiempo donde n varía con el ancho de una máquina registradora. En una posición arbitraria entero, normalmente se sabe cuántos máquina de palabras, por lo que generalmente, usted puede saltar directamente a la palabra más significativa.
Una vez que usted sabe el tamaño de dígitos binarios, puede escalar por $\log 2 \over \log 10$ para obtener el número de dígitos decimales. Tipo de.
El problema es que este factor de escala es (creo) un número irracional. Si usted tiene un número máximo de dígitos que usted necesita preocuparse acerca de, usted puede utilizar una aproximación racional y sólo tendrá que preocuparse de conseguir el redondeo a la derecha.
La pregunta es, por lo tanto - hay una forma de determinar este número de dígitos decimales de manera eficiente y precisa de los números de cualquier tamaño? Hay (por ejemplo) un enfoque completamente diferente para el cálculo de la que no he pensado?