Tout point flottant binaire peut être formaté exactement en décimal. La chaîne résultante peut être quelque peu longue, mais c'est possible. Dans mon article sur la virgule flottante, je couvre l'importance de la précision, et maintenant je veux cette fonction. Ce défi consiste à écrire un programme ou une fonction qui prend une valeur à virgule flottante en entrée et formate une chaîne décimale exacte en sortie.
Pour nous assurer que nous travaillons avec les bons nombres à virgule flottante, un format précis doit être fourni en entrée du programme. Ce format sera deux entiers Significand Exponent
, où la valeur réelle en virgule flottante est Significand * 2 ^ Exponent
. Notez que l'une ou l'autre valeur peut être négative.
Détails:
- La plage et la précision d'au moins un flottant de 32 bits doivent être prises en charge (aucune entrée n'ira au-delà de cela)
- La valeur formatée décimale doit être une représentation exacte (simplement assez proche pour garantir un retour en rond correct pour flotter n'est pas assez bon)
- Nous ne faisons pas confiance aux fonctions de formatage à virgule flottante de la bibliothèque standard pour être suffisamment correctes ou assez rapides (ex:)
printf
, et donc elles ne peuvent pas être utilisées. Vous devez faire le formatage. Les fonctions de formatage / conversion intégrées sont autorisées. - Il ne peut pas y avoir de zéros de tête ou de fin, à l'exception du zéro de tête requis devant le
.
s'il n'y a pas de composant de nombre entier - Une fonction ou un programme entier est autorisé.
Exemples:
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
Le code le plus court gagne.
.0
?
0.abc
n'est pas un zéro de début, alors ce abc.0
n'est pas un zéro de fin.
.0
des nombres entiers lorsqu'il s'agit de nombres à virgule flottante. Voir par exemple Python: str(1.0) == '1.0'
versus str(1) == '1'
. Votre logique est toujours incohérente.