Tôi đã đọc cuốn sách C Primer Plus và có ví dụ nàydài đúp trong C
#include <stdio.h>
int main(void)
{
float aboat = 32000.0;
double abet = 2.14e9;
long double dip = 5.32e-5;
printf("%f can be written %e\n", aboat, aboat);
printf("%f can be written %e\n", abet, abet);
printf("%f can be written %e\n", dip, dip);
return 0;
}
Sau khi tôi chạy này trên macbook của tôi Tôi đã khá sốc tại đầu ra:
32000.000000 can be written 3.200000e+04
2140000000.000000 can be written 2.140000e+09
2140000000.000000 can be written 2.140000e+09
Vì vậy, Tôi nhìn quanh và phát hiện ra rằng định dạng đúng để hiển thị đôi dài là sử dụng %Lf
. Tuy nhiên tôi vẫn không thể hiểu tại sao tôi có đôi giá trị abet
thay vì những gì tôi nhận được khi tôi chạy nó trên Cygwin, Ubuntu và iDeneb đó là khoảng
-1950228512509697486020297654959439872418023994430148306244153100897726713609
013030397828640261329800797420159101801613476402327600937901161313172717568.0
00000 can be written 2.725000e+02
Bất kỳ ý tưởng?
Bạn có chắc bạn có mã mà chính xác? Tôi chỉ cần chạy nó trên MacBook của tôi - MacOS X 10.5.8 (GCC 4.0.1) và có kết quả Cygwin của bạn. –
Có, tôi vừa kiểm tra lại. Btw Tôi đang chạy MacOS X 10.6.2 (GCC 4.2.1) – reubensammut
Thực ra tôi nhận được câu trả lời vô nghĩa dự kiến trên Mac. Khó hiểu. Chạy 'otool -L' trên thực thi của tôi cho tôi biết rằng nó đang chạy với /usr/lib/libSystem.B.dylib phiên bản 111.1.4; đó là thư viện cung cấp 'printf'. Nếu bạn có cùng một phiên bản của thư viện đó, bạn sẽ nhận được cùng một câu trả lời. –