浮点我有这样的结构:对于比较升序排序
typedef struct _Preset Preset;
struct _Preset
{
gfloat freq;
};
我希望能够按升序排序。 我写这个函数使用整数“字典顺序”检查是否两个浮点数比较接近对方:
gint comp_func_sort_float(Preset *ps1, Preset *ps2)
{
gint freq1, freq2;
freq1 = *(int*)&ps1->freq;
freq2 = *(int*)&ps2->freq;
return (freq1 - freq2);
}
我想用有限的精度进行比较:
gint comp_func_sort_float(float A, float B)
{
int dif;
assert(sizeof(float) == sizeof(int));
if (A == B)
return 0;
dif = abs(*(int*)&A - *(int*)&B);
if (dif <= 0.25f)
return 0;
return -1;
}
存在另一个这样做的方法。
铸造一个指向'浮'指向'int'的指针,然后取消引用该指针不会很好。除非'int'和'glfloat'以相同的格式存储,否则不会得到远近接近实际值的值。事实上,你对这段代码的看法是[* undefined behavior *](http://en.wikipedia.org/wiki/Undefined_behavior)。 – 2014-12-07 01:17:36
“另一个”是错误的词,因为作为比较函数,你没有意义。线索是它永远不会返回负数。 – Gene 2014-12-07 01:18:54
@Gene:那么,至少第二个“可选”方式稍好一些。 – usr2564301 2014-12-07 01:20:12