Da questo post del mio connazionale Radu Grigore, scopro un bellissimo teorema di McEliece (per la cronaca, Robert McEliece è stato negli anni '60 compagno di dottorato di ricerca con Donald Knuth, vero mostro sacro dell'informatica):
Any continuous strictly increasing function f : R -> R with the inverse g, g(Z) included in Z, has the dual properties:
- ceiling(f(x)) = ceiling(f(ceiling(x)))
- floor(f(x)) = floor(f(floor(x)))
OK, adesso so che volete un esempio semplice in C# :-)
System.Math.Sqrt è definita in {double non negativi} con valori in {double non negativi}, è
monotona strettamente crescente strettamente ascendente (si dice così?) e per argomenti interi non negativi la sua inversa fornisce argomenti interi non negativi. Quindi, in base al teorema di McEliece, abbiamo:
- Math.Ceiling(Math.Sqrt(x)) == Math.Ceiling(Math.Sqrt(Math.Ceiling(x)))
- Math.Floor(Math.Sqrt(x)) == Math.Floor(Math.Sqrt(Math.Floor(x)))
true, dove x è un double. Oppure, un altro esempio semplicissimo: System.Math.Log10.