c语言浮点数排序写上注释
时间: 2024-09-29 14:12:14 浏览: 50
在C语言中,由于浮点数不是完全有序的(存在精度问题),直接使用标准的`<`、`>`操作符对浮点数进行排序可能会得到意想不到的结果。我们可以使用一些技巧,比如四舍五入比较,来编写一个简单的浮点数排序函数。下面是一个示例,带有必要的注释:
```c
#include <stdio.h>
#include <math.h> // 包含数学库,用于近似比较
// 自定义浮点数比较函数
int compare_floats(const void *a, const void *b) {
float num1 = *(const float *)a;
float num2 = *(const float *)b;
// 使用fabs()函数计算两个浮点数的绝对差值,并与一个很小的数epsilon做比较
float diff = fabs(num1 - num2);
float epsilon = DBL_EPSILON; // IEEE 754标准规定的浮点数最小有效差异
if (diff <= epsilon) {
return num1 > num2 ? 1 : -1; // 如果差值小到可以忽略,则按原顺序判断
} else {
return num1 > num2 ? -1 : 1; // 否则按照数值大小本身进行判断
}
}
// 使用qsort()函数对浮点数数组进行排序
void sort_float_array(float arr[], int n) {
qsort(arr, n, sizeof(float), compare_floats); // 传入比较函数
}
int main() {
float numbers[] = {1.001, 0.999, 1.0, 0.9, 1.0001};
int size = sizeof(numbers) / sizeof(numbers[0]);
printf("Before sorting:\n");
for (int i = 0; i < size; i++) {
printf("%.3f ", numbers[i]);
}
sort_float_array(numbers, size);
printf("\nAfter sorting:\n");
for (int i = 0; i < size; i++) {
printf("%.3f ", numbers[i]);
}
return 0;
}
```
阅读全文