(1) #include "math.h" ではなく
(2) #include <math,h> が正しい?

しかし、VC++もgccも(1)でも問題なくビルドできる。

そして、
(1)では、gccのabs(double)はintを返してしまう。
(2)では、gccでもabs(double)はdoubleを返す。

しかし、#include "math.h" でエラーなり、警告が出ればいいのに。
これに対応した定義が残っているというのは昔の名残かねえ。