• 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);

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

  • 相关阅读:
    vue 的模板编译—ast(抽象语法树) 详解与实现
    Vue 组件(component)之 精美的日历
    nvm 装 nodejs 重启终端失效的解决方法
    vue 2 仿IOS 滚轮选择器 从入门到精通 (一)
    np.stack() 与 tf.stack() 的简单理解
    PHP 之 Ci框架下隐藏index.php
    Boosting 简单介绍
    Adaboost算法流程及示例
    Python 之 解码汉字乱码(如果gbk、utf8都试过不行,可以试试这个)
    Linux 之 tar和nc传文件
  • 原文地址:https://www.cnblogs.com/TonyNeal/p/abs_otherabs.html
Copyright © 2020-2023  润新知