Đó chắc chắn an toàn, nhưng bạn phải xem xét ý nghĩa của nó đối với các thuật toán của bạn. Nếu thuật toán của bạn sử dụng factor
làm số chia (và không tự kiểm tra chia cho số không), thì có, hoàn toàn hợp lý để kiểm tra factor != 0.0f
trước khi gọi số applyComplexAlgorithm(factor)
.
Bây giờ, bạn có nên kiểm tra giá trị nhỏ hơn một số epsilon trước khi sử dụng factor
hay không, hoàn toàn phụ thuộc vào mã của bạn và không thể được xác định riêng biệt với mã bạn đã cung cấp.
Nếu bạn đã sử dụng giá trị đặc biệt 0.0f
dưới dạng giá trị nội dung cụ thể (chẳng hạn như không thể tính toán hệ số), thì có, hoàn toàn an toàn để so sánh việc sử dụng ==
. Ví dụ, đoạn code sau của sử dụng 0.0f
là xác định và không bao giờ phụ thuộc vào bất kỳ loại lỗi roundoff:
float calculateFactor()
{
int phase = moon_phase();
if (phase == FULL) { // whatever special case requires returning 0.0f
return 0.0f;
} else {
return 1.0 + (phase * phase); // something that is never 0.0f
}
}
float factor = calculateFactor();
if(factor != 0.0f)
applyComplexAlgorithm(factor);
Nguồn
2011-12-20 22:54:52
Tôi không chấp nhận câu trả lời chỉ vì lợi ích của việc có câu trả lời được chấp nhận trong câu hỏi của tôi, có thực sự là một câu trả lời mà tôi tìm thấy câu trả lời câu hỏi đầy đủ. –