Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

-AltroTest- (la mia soluzione)

I numeri possibili nel Quiz Sharp #36 sono:

1 - Pow(10, -2043)

e

0 = 0 * Pow(10, Pow(10, 2043) - 1)

Per avere un'idea sulla grandezza del numero moltiplicato con 0, pensate che un googolplex è "solo" Pow(10, Pow(10, 100)).

Se al posto di 0 mettete 1, cioè 1e99...9, ovviamente il compilatore vi dà "Floating-point constant is outside the range of type 'double'". Come mai allora per 0e99...9 va tutto bene e il compilatore fornisce il risultato corretto? Il compilatore riconosce una moltiplicazione con 0 e chiude per il resto gli occhi. Quando tokenizza la parte exponent dell'espressione 0e99...9, non gli interessa di rappresentare 99...9 ma lo riconosce come un literal numerico sintatticamente valido per una parte exponent e tutto va bene anche se quel literal ha 2043 cifre.

Vi chiedete cosa c'entrano questi commenti con il test? Il compilatore fa così passare anche 0e- oppure 0e+ senza errori! Se al posto di 0 provate con 1 (cioè 1e- oppure 1e+), otterrete l'errore "Floating-point constant is outside the range of type 'double'", però con 0 tanto il risultato sarà sempre 0! Sarà un bug? Ce lo potrebbe dire Luca.

In base a questo discorso, la mia soluzione è questa:

System.Console.WriteLine(-0e-);

Print | posted on martedì 7 settembre 2004 02:36 | Filed Under [ Quiz Sharp Test Sharp Carillon .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET