C:为什么工厂在比较 float 时给出奇怪的结果?

标签 c floating-point

我有一个比较 2 个 float 的简单代码:

我尝试使用 fabs,但它给出了错误的奇怪结果。错误是什么,正确的形式是什么?

#include <stdio.h>
#include <stdlib.h>
#include <float.h>

void compareFloat(double a1, double a2)
{
   if(fabs(a1 - a2) < DBL_EPSILON)
       printf("a1 is smaller\n");
   else
       printf("a1 is larger\n");
}

int main()
{
 float a1=0.0000004f, a2=0.0005f;
 compareFloat(a1, a2);
}

这段代码有什么错误?它总是打印 a1 is smaller 即使我设置 a1=0.004f 和 a2=0.0005f

最佳答案

abs 的原型(prototype)是一个整数!

int abs (int number);

你想要 float 晶圆厂

double fabs (double number);

关于C:为什么工厂在比较 float 时给出奇怪的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16857724/

相关文章:

在 C 中创建多个线程 : write pid, tid 并返回整数

c++ - int64_t 再次加倍到 int64_t,精度损失

c - 我还是 C 的新手,我不知道为什么我的 float 结果是随机的(也许是类型提升规则?)

python - 在Python中动态改变浮点精度

types - 单数据类型与双数据类型

c - C中的定点数字振铃滤波器

c - 系统调用参数 read(buf) 指向不可寻址的字节

c - 在 Arduino 上每 y 秒执行一次函数 x 秒

java - 双倍乘以 100 然后转换为 long 给出了错误的值

C 结构体数组 结构体数组