浮點我有這樣的結構:對於比較升序排序
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