zoukankan      html  css  js  c++  java
  • abs和其他绝对值的区别

    Q1: 在C++中,abs和fabs到底有什么区别?

    Q2: 为什么我在一些OJ中用abs会显示“Compile Error”或“编译错误”?

    在这篇博客中,我们将对这几个问题进行深入的探讨。

    工欲善其事,必先利其器。

    我们先对abs和fabs以及其他的求绝对值函数的函数进行比较:

    /*我把这几个函数的定义合并在一起看*/
    int __cdecl abs(int _X);
    long __cdecl labs(long _X);
    __MINGW_EXTENSION __int64 __cdecl _abs64(__int64);
    double __cdecl fabs(double _X);
    #ifndef __CRT__NO_INLINE
    #if !defined (__ia64__)
    __CRT_INLINE double __cdecl fabs (double x)
    {
    double res = 0.0;
    __asm__ __volatile__ ("fabs;" : "=t" (res) : "0" (x));
    return res;
    }
    #endif
    #endif

    很容易看出,abs适用于整型,labs适用于长整型,_abs64适用于__int64即64位超长整型,fabs适用于任何整型(32位以下,包括小数型【浮点数】)

    除了这个区别,还有其他区别吗?

    答案是肯定的。

    因为如果只有这个区别,你OJ提交上去的代码就不会CE了,最多给你个WA/NA,运气好的还会AC。

    最主要的在哪儿呢?

    在DEV-C++中输入"abs()",按住Ctrl,鼠标单击abs,会弹出来一个库,往库名那里一看:

    stdlib.h

    而输入"fabs()",用类似的方法,库的名是

    math.h

    很多人被误导了,以为abs在math.h库中,但是实际上是在stdlib.h库中间。

    这就是CE的原因

    在百度百科中,fabs这样被定义:

    原型:在TC中原型是extern float fabs(float x);,在VC6.0中原型是double fabs( double x );。

    头文件:#include <math.h>

    功能:求浮点数x的绝对值

    说明:计算|x|, 当x不为负时返回x,否则返回-x

    类似函数:abs

    在百度百科中,abs这样被定义:

    函数名: abs

    功 能: 求整型变量的绝对值

    头文件:cstdlib cmath

    用 法: int abs(int i);

    所以,你的问题,弄清楚了么?

  • 相关阅读:
    用VisualC#.NET编写服务器日期控件
    全局程序集缓存GAC是什么概念
    HttpRequest.Filter 属性
    创建ASP.Net自定义控件
    js/javascript 判断变量未定义
    DevExpress 汉化(简单、实用、快速)
    一个页面标题和过滤输出的解决方案
    用VisualC#.NET编写服务器日期控件(源碼)
    ASP.NET多语言支持组件简介
    ASP.NET服务器控件编程浅析
  • 原文地址:https://www.cnblogs.com/TonyNeal/p/abs_otherabs.html
Copyright © 2011-2022 走看看