On Nov 30, 2011, at 4:00 PM, Matthias Schabel wrote:
Oh, okay, missed that. So I probably don't fully understand what the units library is doing but I find this behavior a bit worrisome.
[kbelco@wsblade001 ~]$ cat test3.cpp
int main(int, char **) { quantityfahrenheit::temperature f(212 * fahrenheit::temperature()); quantitycelsius::temperature c(f); std::cout << f << std::endl; std::cout << c << std::endl; return 0; }
[kbelco@wsblade001 ~]$ ./a.out 212 F 117.778 C
If 'f' is 212ºF, why, when converting it to ºC, do I end up at 117 and change? Is this really what we should expect? It seems that this very simple use case produces unexpected, and to a casual user wrong, results. I understand the need for complexity but it seems to show up very early in the user experience.
Because a temperature change of 212ºF is equal to a temperature change of 117.778ºC = (5/9)*212. What would you expect the following to do:
[ snipped a very complete response ] Hi Matthias, Sorry, I didn't explain myself very well. I was merely surprised that quantities of temperature are, by default, temperature differences not absolute temperatures. With my rusty engineering hat on, I'd have expected quantities of temperature to be absolute so they're consistent with the published literature. I think of temperature differences as needing explanation such as outputting a Celsius temperature difference as º∆C (delta ºC, ºdC, ...) rather than expressing a temperature difference with just ºC. Operating under the principle of least surprise, I found the default temperature behavior surprising, that's all. I don't know how useful temperature difference by itself really is but I'd guess it's less common than absolute temperatures or normalized temperatures though differences are useful, for example, in temperature gradients. That said, I'm sure you have good reasons for the choices you made. And let me say that I'm impressed with your library and look forward to using it going forward. Thanks again for your very detailed response. -- Noel