Tôi cần kiểm tra các phao không hữu hạn và loại bỏ chúng. Tôi đã định sử dụng math.IsInf()
để kiểm tra phao nhưng tôi đã thấy một số ppl sử dụng math.IsNaN()
cho mục đích này. Là một trong những tốt hơn cho mục đích này hơn khác? và nếu vậy thì sao?Điều nào là tốt hơn để thử nghiệm cho các float không phải là IsNaN hoặc IsInf?
chỉnh sửa: Điều này đã bị hoãn vì không rõ ràng ở đây, đây là thông tin bổ sung sẽ làm rõ câu hỏi. Tôi đã thực hiện bài tập 3.1 từ "Ngôn ngữ lập trình đi" tham chiếu đến số program này. Bài tập yêu cầu
Nếu hàm f trả về giá trị float64 không hữu hạn, tệp SVG sẽ chứa các phần tử không hợp lệ (mặc dù nhiều trình xử lý SVG xử lý> điều này một cách duyên dáng). Sửa đổi chương trình để bỏ qua đa giác không hợp lệ.
Tôi đã bào để giải quyết nó bằng cách thêm dòng sau vào góc func
if math.IsInf(z, 0) {
return math.NaN(), math.NaN()
}
và thay đổi các nội dung của thứ hai vòng lặp for trong chính để
ax, ay := corner(i+1, j)
if math.IsNaN(ax) {
continue
}
bx, by := corner(i, j)
if math.IsNaN(bx) {
continue
}
cx, cy := corner(i, j+1)
if math.IsNaN(cx) {
continue
}
dx, dy := corner(i+1, j+1)
if math.IsNaN(dx) {
continue
}
fmt.Printf("<polygon points='%g,%g %g,%g %g,%g %g,%g'/>\n",
ax, ay, bx, by, cx, cy, dx, dy)
Tôi muốn kiểm tra công việc của tôi vì vậy tôi quyết định tìm kiếm bất kỳ câu trả lời nào khác ppl đã đăng trực tuyến cho vấn đề này. Không ai khác mà tôi thấy đã sử dụng math.IsInf()
trong đó giải pháp nhưng hầu hết đã sử dụng math.IsNaN()
. Điều này làm cho tôi tự hỏi nếu tôi đã mất tích một cái gì đó và nếu math.IsNaN()
là tốt hơn cho mục đích này vì một lý do nào đó. Vì vậy, tôi đã xem qua Go Documents cho cả hai chức năng. Tôi tìm kiếm NaN trên wikipedia và IEEE 754. Tôi đã tìm kiếm trên web chung vì sao mọi người khác lại sử dụng math.IsNaN()
mặc dù nó dường như ít trực quan hơn đối với tôi. Sau đó, tôi đã tìm kiếm ở đây và trên stackoverflow cho câu trả lời sau khi tất cả những điều đó tôi đã không thực sự có một câu trả lời vì vậy tôi quyết định đăng một câu hỏi.
Bạn có biết những điểm nổi vô hạn và NaN là gì không? – user2357112
@ user2347112 - Khi tôi hiểu nó, NaN có nghĩa là Không phải là một số và biểu thị các câu trả lời cho những thứ như 0/0, một số tới một sức mạnh tiêu cực hoặc vô cùng. Infinity là bất kỳ số nào từ lâu để được biểu diễn bằng phao. ít nhất đây là những gì nghiên cứu của tôi đã dẫn tôi tin cho đến nay. – sjtwiv
Thử nghiệm IsInf cho vô cực hoặc âm. Các thử nghiệm IsNaN cho NaN. Nếu bạn cần một hoặc cả hai bài kiểm tra đó, hãy sử dụng chức năng hoặc chức năng làm những gì bạn cần. – user2357112