Tôi nhận được kết quả không mong muốn từ các hàm round()
và roundf()
trong thư viện math.h
. Đây là đoạn mã mẫu:Làm cách nào để sử dụng hàm round() trong C?
#include <stdio.h>
#include <math.h>
int main(void)
{
float f;
double d;
/* Note man page says that roundf() returns a float
and round() returns a double */
f = roundf(1.2);
d = round(1.2);
printf("%f\n", f);
printf("%lf\n", d);
return 0;
}
Khi tôi complie và chạy chương trình tôi nhận được:
gcc -lm round.c
./a.out
288.000000
524288.000000
Weird huh?
Cập nhật: Cùng với câu trả lời tôi đã xác nhận rằng mã hoạt động đúng trên trình chỉnh sửa mới hơn. (Tôi nghĩ rằng% lf không phải là đúng printf specifier nhưng điều đó không ảnh hưởng đến kết quả cuối cùng trong trường hợp này.) Tôi sẽ cần phải tìm ra lý do tại sao trình biên dịch có thể hành xử theo cách này bởi vì tôi có chạy mã sử dụng vòng() và đã được trình biên dịch trên cùng một máy. Tôi sẽ cập nhật bài đăng khi tôi tìm ra nó.
gcc -v
Reading specs from /usr/lib/gcc-lib/i386-slackware-linux/2.95.3/specs
gcc version 2.95.3 20010315 (release)
Tôi không nhận được hành vi này. Nó xuất ra 1.000000 cho cả hai trường hợp của tôi. – tvanfosson
Upvoted để bù đắp một downvote. Đây là một câu hỏi hoàn toàn hợp lệ. Tôi cũng sẽ hỏi câu hỏi này nếu tôi có hành vi này. –
cập nhật đầy đủ trình biên dịch của bạn. GCC 2.95.3 đã 8 tuổi ... Hàng triệu lỗi đã được sửa chữa trong những năm này. –