【问题标题】:abs function for float returning un expected values C用于浮点返回非预期值的 abs 函数 C
【发布时间】:2021-11-01 10:12:08
【问题描述】:

我在使用带有浮点值的 abs() 函数时遇到问题。它在使用整数时工作得很好,但是在使用浮点数时它总是只输出 1,即使它应该是例如 3.1 - 1.8 作为 1 出来。我正在使用数组来获取值,只是不确定发生了什么,我尝试使用fabs 和从 float 变为 double 但没有区别。

 x_distance = abs(x_coord[0] - x_coord[1]);

D:/Data D 驱动器/University/Year_2/EEEE 2063/CourseWork2/test/main.c:33:18:

【问题讨论】:

  • 对于实数(双精度),您应该使用 fabs 函数:programiz.com/c-programming/library-function/math.h/fabs abs 仅适用于整数
  • 你实际做的是用1 调用abs,因为3.1-1.8 的计算结果为1.3,在转换为int 时被截断为1。正如您在规范中看到的那样,该函数被定义为int abs(int),除了int 之外不能接受或返回任何内容。如果您在使用fabs 时遇到问题,请显示您输入的内容和获得的内容。而且...你确实包括了math.h 是吗?
  • 请在您的问题中添加完整的错误消息,而不是在 cmets 中。
  • 如果您“尝试使用 fabs 并从 float 更改为 double 但没有区别”,那么还有其他内容未显示。请发Minimal Reproducible Example,最短的完整代码,显示问题。
  • 这不是错误消息,而只是其中的一部分。这表明错误所在的位置,但由于您没有提供完整的程序,因此行号对我们没有用。真正的错误消息仍然丢失。是不是类似于“隐式声明函数fabs”?

标签: c


【解决方案1】:

abs 用于int 参数。将它与浮点参数一起使用会将值截断为整数(或溢出)。

fabsffabsfabsl 分别用于floatdoublelong double。这些在<math.h> 中声明。

或者,包括 <tgmath.h>(类型通用数学)并将 fabs 与任何浮点类型一起使用。

【讨论】:

    【解决方案2】:

    我刚刚意识到我没有包含 math.h 库,因为我认为它是在 stdlib.h 中定义的。 谢谢大家的帮助

    【讨论】:

    • abs()stdlib.h 中,但fabs()math.h 中。永远不要留下未解决的编译器警告。
    • 查看编译器警告并保持它们 = 0 很重要。
    • 不包括<math.h> 只是问题的一部分。浮点数需要使用fabsffabsfabsl(分别为floatdoublelong double),而不是abs,后者用于int
    猜你喜欢
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    相关资源
    最近更新 更多