TopCoder

abcabcabc
有人要寫 p6 嗎 > <

User's AC Ratio

77.8% (7/9)

Submission's AC Ratio

56.5% (13/23)

Tags

Description

本題為互動題,限用 C++ 作答。由於評測系統限制,請使用 C++20 以上的版本上傳。你可以在這裡找到範例實作以及範例評分程式,詳細注意事項以及常見問題請參考 Hints。

你有兩個 64 位元浮點數,請判斷他們是不是一樣的。

Implementation Details

本題請不要使用標準輸入輸出流,不過你仍然可以輸出除錯訊息至標準錯誤流(stderr)。

你需要完成以下的一個函式,詳細執行流程請參考後面的內容:

bool floatcmp(double a, double b);
  • 在一筆測試資料中,floatcmp 會被呼叫至多 10000 次。
  • 回傳值為 true 如果兩個浮點數相同,false 如果兩個浮點數不同。

Example

一個被判斷為 Accepted 的範例互動狀況如下:




評測程式端 參賽者程式端
呼叫 floatcmp(0.1, 0.2)。
回傳 false。
呼叫 floatcmp(0.3, 0.2999999...75)。
回傳 true。
呼叫 floatcmp(+0.0, -0.0)。
回傳 false。

第二次互動時的完整數字可以在範例實作以及範例評分程式的壓縮檔中找到。

Input Format

範例評分程式以下列方式輸入:

  • line $1$: $t$
  • line $2 + i$: $a_i, b_i$

其中 $t$ 代表要呼叫 floatcmp $t$ 次,第 $i$ 次呼叫的引數為 $a_i$ 與 $b_i$。

Output Format

範例評分程式以下列方式輸出:

line $i$: $r_i$

其中 $r_i$ 為第 $i$ 次呼叫 floatcmp 的輸出。請注意範例評分程式不會檢查你的輸出是否正確。

Sample Input 1

3
0.1 0.2
0.3 0.299999999999999988897769753748434595763683319091796875
+0.0 -0.0

Sample Output 1

false
true
false

Hints

由於 Windows Defender 以及各種奇怪東西的限制,本題的範例編譯指令不提供 Windows 批次檔。編譯及測試教學請參考下列說明。

  • 如果你的系統是 Linux,你可以直接執行 compile.sh 編譯你的程式,編譯結果會是 floatcmp.exe,請直接用命令列執行該檔案。
  • 如果你的系統是 MacOS,你需要將 compile.sh 當中的 -static 參數移除,其餘與 Linux 相同。
  • 如果你的系統是 Windows,你有以下的選擇:
    1. 本地測試時加入 #include "grader.cpp",並且以單一檔案的編譯執行方式測試,請注意這一行上傳時需要刪除,否則你會獲得一個 Compile Error。
    2. 將 compile.sh 的變數替換後直接於命令列執行,請注意你需要確保 g++ 在系統的環境變數 PATH 中。
    3. 如果你的電腦已經有 WSL (Windows Subsystem for Linux),你可以直接使用 WSL 並按照 Linux 的做法。
    4. 使用電腦教室的 Ubuntu(啟動時可以選擇系統)並按照 Linux 的做法。

Problem Source

Subtasks

No. Testdata Range Constraints Score
1 0 範例測資 0
2 0~1 無額外限制 100

Testdata and Limits

No. Time Limit (ms) Memory Limit (VSS, KiB) Output Limit (KiB) Subtasks
0 1000 262144 65536 1 2
1 1000 262144 65536 2