Mã python sau tính toán số lần lặp lại để thực hiện công cụ dựa trên một số biến. tất cảArithmetics điểm nổi: Có thể không an toàn phụ thuộc vào so sánh cụ thể?
# a - b - c is always a multiple of d.
i = (a - b - c)/d
while i:
# do stuff
i -= 1
Các biến sẽ cùng loại, mà chỉ ints
hoặc floats
hoặc bất cứ thứ gì. Mối quan tâm của tôi là liệu nó có hoạt động chính xác không nếu các giá trị là floats
. Tôi biết đủ để luôn xem xét những cạm bẫy của việc dựa vào các giá trị float chính xác. Nhưng tôi không thể nói nếu điều trên là nguy hiểm hay không. Tôi có thể sử dụng i = int(round((a - b - c)/d))
, nhưng tôi tò mò muốn hiểu nổi tốt hơn.
Tất cả đều được giải thích như sau: a - b - c
là bội số chính xác của d
. Vì vậy, tôi dựa vào (a-b-c)/d
để trở thành một giá trị i
mà tôi có thể trừ 1
từ và nhận được số lần lặp lại dự kiến trong vòng lặp while, với giả định ngụ ý rằng i == 0
trở thành sự thật. Đó là, có thể tính toán bội số như thế này được giảm đi 1 để đạt được chính xác 0?
Tôi muốn không chỉ biết nếu nó không an toàn, nhưng quan trọng hơn, tôi cần phải hiểu gì về điểm nổi để giải quyết một câu hỏi như thế này? Nếu ai đó biết chắc chắn liệu điều này có an toàn hay không, liệu có thể giải thích như thế không?
Nếu bạn nghĩ 'i' phải có một giá trị số nguyên, hãy đặt nó thành số nguyên. Điều đó sẽ ít nhất đảm bảo rằng vòng lặp của bạn sẽ chấm dứt! – katrielalex