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

System.Double.Epsilon con un pizzico di surreale

Per chi ha voglia di un pizzico di surreale, ecco uno snippet che mi ha fatto impazzire...

// foo.cs
//
// csc /d:DUMMY foo.cs # stampa False
// csc foo.cs # stampa True
 
using System;
using System.Diagnostics;
 
class Test
{
      [Conditional("DUMMY")]
      static void Dummy(double x)
      {
            x = x;
      }
 
      static void Main()
      {
            double x = Math.Pow(double.Epsilon, 2);
            Dummy(x);
            Console.WriteLine(0 < x && x < double.Epsilon);
      }
}

Questo codice stampa False se compilato col simbolo DUMMY e True in caso contrario, cioè l'espressione:

0 < x && x < double.Epsilon

ha valori diversi in base al fatto che Dummy (che in teoria non dovrebbe far nulla) venga chiamato prima o no...

Non ho ancora capito perché.

Print | posted on giovedì 8 settembre 2005 20:17 | Filed Under [ Bugs? ]

Powered by:
Powered By Subtext Powered By ASP.NET