Mặc dù sự thất bại của ANSI C để xác định một hình thức khai báo biến đối số mà sạch sẽ có thể xử lý một mở rộng có độ chính xác long double
loại có định dạng khác với từ double
đã dẫn đối với loại được sử dụng hiệu quả trên nhiều nền tảng (không may, IMHO, vì nó là loại tốt để sử dụng không chỉ trên các hệ thống có bộ xử lý x87 mà còn trên các hệ thống không có FPU), cách duy nhất cho một hệ thống có mở rộng phù hợp các loại -precision để xử lý một tuyên bố như:
long double a = 0.1;
là phải có 0,1 số cuộc sống bắt đầu đen như một long double
bằng 14,757,395,258,967,641,293/147,573,952,589,676,412,928; sẽ là vô lý khi có tuyên bố đó đặt a
thành 7,205,759,403,792,794/72,057,594,037,927,936 (khoảng 0.10000000000000000555, giá trị của (double)0.1
). Có thể được cho là một vài trường hợp có thời gian bắt đầu bằng chữ số là long double
trước khi chuyển đổi xuống có thể khiến giá trị khác với giá trị nếu nó bắt đầu bằng double
hoặc float
(ví dụ: gần nhất là float
đến 9007199791611905.0
là 9007200328482816, cao hơn giá trị được yêu cầu 536870911, nhưng (float)(double)9007199791611905.0
sản lượng 9007199254740992, là 536870913 dưới giá trị đó. những gì người ta thực sự muốn.
'long double' là một loại có độ chính xác cao hơn' double'., Giống như 'long int' là một biến thể lớn hơn' int'. –
Đối với vấn đề của bạn, * bạn nhận được lỗi nào? Vui lòng chỉnh sửa câu hỏi của bạn để bao gồm đầu ra lỗi hoàn chỉnh và chưa được chỉnh sửa, * và * a [Ví dụ tối thiểu, hoàn chỉnh và có thể xác minh] (http://stackoverflow.com/help/mcve) gây ra lỗi. –
Tôi đã chỉnh sửa câu hỏi để biết thêm chi tiết, bao gồm cả thông báo lỗi. –