2012-02-06 28 views
6

Tôi cố gắng để hiểu tại sao sử dụng '/' với long double theo cách sau dẫn đến một giá trị 0,000000 trong khi cùng mã với đôi khôngSử dụng '/' với đôi dài?

double d = (double)total_results/(double)total_points; 

Cung cấp giá trị 0,785403 nhưng

long double d = (long double)total_results/(long double)total_points; 

Cung cấp giá trị 0.000000. Tôi cố gắng để có được giá trị chính xác nhất cho

EDIT 'TOTAL_RESULTS/total_points': Cuối cùng các lỗi đơn giản là rằng tôi đã xuất ra nó bằng cách sử '% f' thay vì '% Lf'

Trước

printf("Running on %d thread(s), results is %f.\n", NUM_THREADS, d);  

Sau

printf("Running on %d thread(s), results is %Lf.\n", NUM_THREADS, d); 
+0

nền tảng/trình biên dịch nào? – CharlesB

+1

Các loại total_results và total_points là gì? Đúc chúng thành 'long double' có thể thay đổi giá trị truy cập theo cách sai – Eregrith

+0

Nó hoạt động với tôi trong C++ –

Trả lời

15

Điều này rõ ràng chỉ là một phỏng đoán, nhưng làm thế nào bạn xuất ra kết quả? Nếu bạn đang sử dụng printf với trình xác định trường sai, việc in sai số không chắc chắn là kết quả có thể xảy ra. Sử dụng g ++, tôi đã thử "% lf" và nhận "-2.0000" khi tôi nên nhận được "0,75". Trình chỉ định đúng là "% Lf", với số vốn là L.

+0

Có hoặc '% llf' cũng hoạt động. (dưới gcc 4.3, Linux ít nhất) –

+0

Đây là vấn đề. Tôi đã sử dụng '% f'. Cảm ơn bạn – Shane

+1

@MrLister: Nhận xét đó không hữu ích; nó chỉ dạy OP ** sai ** cách để làm một cái gì đó và dường như có nó làm việc, khi ** ** câu trả lời đúng ** đã được đưa ra. –

Các vấn đề liên quan