Description
This is not a real world example! Please don't suggest using decimal or something else. 
I am only asking this because I really want to know why this happens.
I recently saw the awesome Tekpub Webcast Mastering C# 4.0 with Jon Skeet again.
On episode 7 - Decimals and Floating Points it is going really weird and even our Chuck Norris of Programming (aka Jon Skeet) does not have a real answer to my question. Only a might be.
Question: Why did MyTestMethod() fail and MyTestMethod2() pass?
Example 1
[Test]
public void MyTestMethod()
{
    double d = 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    Console.WriteLine("d = " + d);
    Assert.AreEqual(d, 1.0d);
}
d = 1
Expected: 0.99999999999999989d But was: 1.0d
Example 2
[Test]
public void MyTestMethod2()
{
    double d = 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    d += 0.1d;
    Console.WriteLine("d = " + d);
    Assert.AreEqual(d, 0.5d);
}
d = 0,5
But why ?
Update
Why doesn't Assert.AreEqual() cover that? 
 
     
     
     
     
     
     
     
     
     
    