It looks like it must be using kelvin as its canonical units:<p><pre><code> 0C + 0C = 273.15 K + 273.15 K = 546.3 K = 273.15 C
</code></pre>
The weirdness is that conversions like that don't work for units that have different zero points. Perhaps addition of temperatures isn't really well defined? If 273.15 K + 273.15 K does <i>not</i> equal 0 C + 0 C, despite 273.15 K = 0 C, it's not clear what addition "means" in this context.<p>One restricted form of addition that makes sense (which maybe is what's intended?) is to consider the 1st temperature an actual temperature, and the 2nd temperature a temperature <i>difference</i> in units of degrees-C (or degrees-K, or degrees-F). So e.g.:<p><pre><code> "5 C warmer than 30 C"
= 30 C + 5 C
= 303.15 K + 5 K
= 308.15 K
= 35 C
</code></pre>
But then addition isn't commutative. The problem is that "degrees C" is overloaded here, to mean both a position on a scale, and the size of a unit on that scale, with no conventional short way of distinguishing which one you mean (which is one reason Kelvin was invented, since things aren't ambiguous if you put absolute zero at 0 K).
It's meaningless to add temperatures when the zero level is at +273.<p>It's like adding years relative to 2010 years ago - it would be meaningless to
add this year - 2010 - with (say) 1666 - the year of the Great Fire of London. It's meaningful to take differences (the Great Fire happened 344 years ago), but not to add. (Unless we converted to some kind of absolute time units e.g. years since the big bang)<p>I'd say what it's doing - converting to an absolute scale then adding - makes sense.
Looks right to me. Asking for 0 degrees celsius + 0 degrees celsius, or put another way, "what's twice as hot as freezing water?", is profoundly nonsensical, but 273.15 degrees celsius is the closest you can get to a sensible answer.
Wolfram Alpha beats Google on this!
<a href="http://www.wolframalpha.com/input/?i=0+degrees+celsius+-+0+degrees+celsius" rel="nofollow">http://www.wolframalpha.com/input/?i=0+degrees+celsius+-+0+d...</a>
Moral of the story: Google is a bunch of cheeky bastards.<p>It took me a while to understand the reasoning behind that as points on a scale versus actual temperature values ("Celsius degrees" versus "degrees Celsius," respectively).<p>Googling "0 Celsius degrees + 0 Celsius degrees" returns 0 Kelvin, which would be expected given the technicality in wording.
Whether "degrees Celsius" refers to a point on the Celsius scale or an interval is ambiguous and is usually determined by context. Although attempts at conventions have existed the effect of typing rather than writing was not considered when they were created and so those conventions are largely ignored. In this case there is no context so google uses "degrees celsius" and "celsius degrees" to distinguish between a scale point and an interval which is a nice natural language solution in my opinion.<p>To better see what is happening try:<p><pre><code> 0 degrees celsius + 10 celsius degrees
0 degrees celsius + 10 degrees celsius
0 celsius degrees + 10 celsius degrees</code></pre>
Even more confusing:<p><a href="http://www.google.com/search?aq=f&ie=UTF-8&q=0+degrees+fahrenheit+%2B+0+degrees+fahrenheit" rel="nofollow">http://www.google.com/search?aq=f&ie=UTF-8&q=0+degre...</a>
what you expect is to add 0 temperature difference to 0 temperature value. What it actually calculate - sum of two temperature values. it's matter of notation imho
Digging a little deeper...<p><pre><code> (0 degrees Celsius) + (0 degrees Celsius) - (0 degrees Celsius) = 0 degrees Celsius
(0 degrees Celsius) - (0 degrees Celsius) = 0 kelvin
(0 degrees Celsius) + (0 kelvin) = 0 degrees Celsius
</code></pre>
The last 2 of the 3 are wrong, so I'd say this is definitley a bug.<p>EDIT: I think I figured it out. It's converting everything after the first temperature to Kelvin, without converting the first temp to Kelvin, and then just doing the arithmetic on the numbers...<p><pre><code> 0C + 0C => 0C + 273K => 0 + 273 = 273
0C + 0C - 0C => 0 + 273 - 273 = 0
0C - 0C => 0 - 273 = -273 = 0K (ok, weird this one then converts back to K)
0C + 0K => 0 + 0 = 0
</code></pre>
EDIT 2: While this does match the results seen by google, I think _delirium's solution is more likely the reason.