Tôi đang sử dụng hàm pow
trong C và lưu trữ giá trị trả về theo kiểu số nguyên. xem đoạn mã dưới đây:giá trị trả lại của pow() được làm tròn xuống nếu được gán cho một số nguyên
for (i = 0; i < 5; i++){
val = (int)pow(5, i);
printf("%d, ", val);
}
đây i
và val
là các số nguyên và đầu ra là 1, 5, 24, 124, 624
. Tôi tin rằng điều này là do phao 25 được coi là 24.99999 ... được làm tròn xuống 24 khi gán cho một số nguyên.
Làm cách nào tôi có thể vượt qua điều này nếu tôi vẫn cần lưu trữ giá trị trả về trong một int?
'float' 25 không được coi là" '24.9 ...', 25 có thể được biểu diễn chính xác dưới dạng phao. Nó chỉ là 'pow' không hoàn toàn chính xác, và vì lý do nào đó trong dịp này đã bỏ lỡ thấp. Đối với nhiều giá trị, nó không thể hoàn toàn chính xác, vì câu trả lời đúng về mặt toán học không phải là một phao chính xác, nhưng đối với những tính toán này, nó có thể là vấn đề có chất lượng thực hiện hay không. –
Xem thêm http://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int để thảo luận về cách triển khai phiên bản nguyên của pow() –
Không sử dụng 'pow' cho lũy thừa số nguyên. Có nhiều cách tốt hơn, an toàn hơn. Nhân tiện, bạn sẽ nhận được hành vi này trên nền tảng nào? Tôi nghĩ rằng một 'pow' tốt sẽ luôn chính xác cho các số nguyên trong đó kết quả chính xác phù hợp với' double'. –