本人在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