本題為互動題,限用 C++ 作答。由於評測系統限制,請使用 C++20 以上的版本上傳。你可以在這裡找到範例實作以及範例評分程式,詳細注意事項以及常見問題請參考 Hints。
你有兩個 64 位元浮點數,請判斷他們是不是一樣的。
你需要完成以下的一個函式,詳細執行流程請參考後面的內容:
bool floatcmp(double a, double b);
floatcmp 會被呼叫至多 10000 次。true 如果兩個浮點數相同,false 如果兩個浮點數不同。
| 評測程式端 | 參賽者程式端 |
|---|---|
呼叫 floatcmp(0.1, 0.2)。 | |
回傳 false。 | |
呼叫 floatcmp(0.3, 0.2999999...75)。 | |
回傳 true。 | |
呼叫 floatcmp(+0.0, -0.0)。 | |
回傳 false。 |
第二次互動時的完整數字可以在範例實作以及範例評分程式的壓縮檔中找到。
範例評分程式以下列方式輸入:
其中 $t$ 代表要呼叫 floatcmp $t$ 次,第 $i$ 次呼叫的引數為 $a_i$ 與 $b_i$。
範例評分程式以下列方式輸出:
line $i$: $r_i$
其中 $r_i$ 為第 $i$ 次呼叫 floatcmp 的輸出。請注意範例評分程式不會檢查你的輸出是否正確。
3 0.1 0.2 0.3 0.299999999999999988897769753748434595763683319091796875 +0.0 -0.0
false true false
由於 Windows Defender 以及各種奇怪東西的限制,本題的範例編譯指令不提供 Windows 批次檔。編譯及測試教學請參考下列說明。
floatcmp.exe,請直接用命令列執行該檔案。-static 參數移除,其餘與 Linux 相同。#include "grader.cpp",並且以單一檔案的編譯執行方式測試,請注意這一行上傳時需要刪除,否則你會獲得一個 Compile Error。| No. | Testdata Range | Constraints | Score |
|---|---|---|---|
| 1 | 0 | 範例測資 | 0 |
| 2 | 0~1 | 無額外限制 | 100 |