本人在VC6.0中编写了这个程序
#include<iostream> #include<math.h> using namespace std; int main() { double a=-0.0000065; cout<<sizeof(a)<<endl; cout<<abs(a)<<endl; cout<<fabs(a)<<endl; system("pause"); return 0; }
运行的结果是
本人看了math.h中关于abs()的定义,是这样
也是有double类型的重载,为什么输出的结果是个整型?
而本人在VS2015中编译,
#include<iostream> using namespace std; int main() { double a = -0.000005; cout << abs(a) << endl; cout << fabs(a) << endl; return 0; }
结果是这样
这次输出的都是double型,求高手解答为什么在VC6.0中abs()有double类型的参数重载,为什么输出的是整型
解决方案
20
math.h里abs专门给int用的
cmath里的abs有浮点数的重载。另外VC里不用std::abs也有浮点数的重载好像是微软本人搞的…
cmath里的abs有浮点数的重载。另外VC里不用std::abs也有浮点数的重载好像是微软本人搞的…
40
具体可以去看生成汇编,应该是
VC6应该是参数为long的abs:http://en.cppreference.com/w/c/numeric/math/abs
VS的是参数为double的:http://en.cppreference.com/w/cpp/numeric/math/fabs
VC6应该是参数为long的abs:http://en.cppreference.com/w/c/numeric/math/abs
VS的是参数为double的:http://en.cppreference.com/w/cpp/numeric/math/fabs