Cualquier punto flotante binario puede formatearse exactamente en decimal. La cadena resultante puede ser algo larga, pero es posible. En mi artículo sobre coma flotante , cubro la importancia de la precisión, y ahora quiero esta función. Este desafío es escribir un programa o función que tome un valor de coma flotante como entrada y formatee una cadena decimal exacta como salida.
Para garantizar que estamos trabajando con los números de coma flotante correctos, se debe proporcionar un formato preciso como entrada al programa. Este formato será dos enteros Significand Exponent
, donde está el valor real de coma flotante Significand * 2 ^ Exponent
. Tenga en cuenta que cualquier valor puede ser negativo.
Detalles específicos:
- El rango y la precisión de al menos un flotante de 32 bits deben ser compatibles (ninguna entrada irá más allá de eso)
- El valor con formato decimal debe ser una representación exacta (simplemente lo suficientemente cerca como para garantizar una vuelta correcta de punta redonda al flotador no es lo suficientemente bueno)
- No confiamos en que las funciones de formato de punto flotante de la biblioteca estándar sean lo suficientemente correctas ni lo suficientemente rápidas (por ejemplo:)
printf
, y por lo tanto no se pueden usar. Debes hacer el formateo. Se permiten funciones integrales de formato / conversión. - Puede que no haya ceros iniciales o finales, excepto el cero inicial requerido delante de
.
si no hay un componente de número entero - Se permite una función o un programa completo.
Ejemplos:
1 -2 => 0.25
17 -3 => 2.125
-123 11 => -251904
17 50 => 19140298416324608
23 -13 => 0.0028076171875
3 120 => 3987683987354747618711421180841033728
3 -50 => 0.00000000000000266453525910037569701671600341796875
-3 -50 => -0.00000000000000266453525910037569701671600341796875
10 -2 => 2.5
-12345 -3 => -1543.125
0 0 => 0
161 -4 => 10.0625
512 -3 => 64
El código más corto gana.
.0
?
0.abc
no es un cero inicial, entonces abc.0
no es uno posterior.
.0
números enteros cuando se trata de números de coma flotante. Ver por ejemplo Python: str(1.0) == '1.0'
versus str(1) == '1'
. Tu lógica sigue siendo inconsistente.