It's not stupid when you realise that NaN is not "not a number" but rather "not a particular number", this becomes clear from
hypot(Inf, NaN)
being Inf rather than NaN hypot(Inf, NaN)
being Inf rather than NaNto my weak undestanding only pow and hypot behave like this; pow for math reasons and i could guess that hypot does that to sorta have |x| <= hypot(x,y)