0

無限大の重なり合うボックスがどのように機能するかを理解しようとしています

次の例が機能しないのはなぜですか。2つの無限の値を導入しようとする場合を除いて、正常に動作します。

この例はtrueを返す必要があります。

SELECT box '((1,1),(infinity, 1))' && box '((2, 1),(infinity, 1))' AS overlap;
overlap 
---------
f

以下の2つの例が機能します

SELECT box '((1,1),(4, 1))' && box '((2, 1),(infinity, 1))' AS overlap;
overlap 
---------
t


SELECT box '((1,1),(4, 1))' && box '((2, 1),(5, 1))' AS overlap;
overlap
---------
t

だから私の質問は:私が間違っていることや私が理解していないことはありますか?

4

1 に答える 1

0

私はpostgresqlのバグリストで尋ねました:

トムレーンは私にこの答えを与えました:

これのテストには以下が含まれます

FPge(box1->high.x, box2->high.x)

ここで、FPgeは次のように定義されます。

#define FPge(A,B)    ((B) - (A) <= EPSILON)

両方のhigh.x値が無限大の場合、無限大から無限大を引いたものになり、IEEE演算でNaNが生成されるため、イプシロンとの比較は誤りになります。

一般に、無限の端点を含む幾何学的演算が正常に動作することを約束するとは思いません。これ以外にも、サポートされているケースと見なす前に修正する必要のあるコーナーケースが大量にある可能性があります。

于 2012-06-06T07:31:15.650 に答える