CGAL 準確斷言和準確構建

2021-10-07 01:36:56 字數 834 閱讀 9449

#include

#include

#include

typedef cgal::exact_predicates_exact_constructions_kernel kernel;

typedef kernel::point_2 point_2;

intmain()

return0;

}

not collinear

collinear

collinear

第乙個結果仍然是錯的,原因與前面相同,它們仍然是浮點運算。

第二個結果不同,它由字串生成(construct),則準確地代表了字串所表示的數。

第三個結果通過構建(construct)中點得到第三個點,構建操作獲得的值跟原始值是一致準確的(計算得到的),所以結果也是正確的。

在很多情況下,操作「精確」浮點資料,它們是由計算得到或由感測器得到的。它們不是象「0.1」這樣的字串,也不是象"1.0/10.0"這樣動態(on the fly)生成的,它是乙個全精度的浮點數。如果它們只是被傳遞入某個演算法並且沒有構建(construct)操作時,你可以使用支援精確斷言(predicate)和非精確構建(construct)的kernel

由於高精度的計算需要消耗比普通計算多的資源,記憶體、時間等,所以使用時需要考慮。

準確斷言和準確構建

hello world 之 cgal

tutorial_hello_world

執行期斷言和編譯期斷言

編譯時斷言和執行時斷言 通常為了檢測一些條件,我們往往在程式裡面加斷言。一般只在debug版有效,release版斷言不生成任何 c 可以使用兩種斷言 靜態斷言和動態斷言,即就是執行期斷言和編譯期斷言!顧名思義,執行期斷言是在程式執行過程中判斷指定的條件,若條件滿足,萬事ok,若斷言失敗,則程式給出...

python assert斷言和自定義異常

tz zs python assert 斷言是宣告其表示式為 true 的判定,如果為 false 則將丟擲異常 assertionerror 簡單 assert 表示式 if not expression raise assertionerror 複雜 assert 表示式 錯誤資訊 if not...

Go基礎系列 介面型別斷言和type switch

介面例項中儲存了實現介面的型別例項,型別的例項有兩種 值型別例項和指標型別例項。在程式執行過程中,介面例項儲存的例項型別可能會動態改變。例如 ins是介面例項 var ins shaper ins儲存值型別的例項 ins c1 一段時間後.ins儲存指標型別的例項,儲存的型別發生改變 ins c2 ...