2012-02-09 64 views
11

Ai đó có thể giải thích cho tôi cách chọn độ chính xác của phao bằng chức năng C?Cách đặt độ chính xác của phao

Ví dụ:

theFatFunction(0.666666666, 3) trở lại: 0,667

theFatFunction(0.111111111, 3) lợi nhuận: 0,111

+2

có thể trùng lặp của [Làm tròn số đến 2 vị trí thập phân trong C] (http: //stackoverflow.com/questions/1343890/rounding-number-to-2-decimal-places-in-c) –

Trả lời

12

Bạn không thể làm điều đó, vì độ chính xác được xác định bởi loại dữ liệu (ví dụ: float hoặc double hoặc long double). Nếu bạn muốn làm tròn nó cho mục đích in ấn, bạn có thể sử dụng các thông số định dạng thích hợp trong printf(), tức là printf("%0.3f\n", 0.666666666).

2

Bạn không thể. Độ chính xác phụ thuộc hoàn toàn vào kiểu dữ liệu. Bạn có floatdouble và thế là xong.

2

Nổi có độ chính xác cố định, tĩnh. Bạn không thể thay đổi nó. Những gì bạn đôi khi có thể làm, là làm tròn số.

Xem this page và cân nhắc quy mô cho mình bằng quyền hạn 10. Lưu ý rằng không phải tất cả các số đều chính xác được thể hiện dưới dạng phao.

+0

bạn có thể làm sàn (x * 100) /100.0 –

1

Hầu hết các hệ thống đều tuân thủ tiêu chuẩn điểm nổi IEEE-754 xác định một số loại điểm động.

Trên các hệ thống, thường là float là IEEE-754 binary32 đơn loại chính xác: nó có 24-bit chính xác. double là loại chính xác gấp đôi binary64; nó có độ chính xác 53 bit. Độ chính xác về số bit được xác định bởi chuẩn IEEE-754 và không thể thay đổi.

Khi bạn in giá trị của các loại dấu phẩy động sử dụng các chức năng của họ fprintf (ví dụ: printf), độ chính xác được xác định là số chữ số có nghĩa tối đa và theo mặc định được đặt thành 6 chữ số. Bạn có thể thay đổi độ chính xác mặc định bằng . theo sau là số thập phân trong đặc điểm chuyển đổi. Ví dụ:

printf("%.10f\n", 4.0 * atan(1.0)); // prints 3.1415926536 

trong khi

printf("%f\n", 4.0 * atan(1.0));  // prints 3.141593 
0

chính xác được xác định bởi các kiểu dữ liệu (ví dụ: float hay double hoặc dài gấp đôi).

Nếu bạn muốn làm tròn nó cho mục đích in ấn, bạn có thể dùng specifiers định dạng thích hợp trong printf(), ví dụ:

printf("%0.3f\n", 0.666666666) //will print 0.667 in c 

Bây giờ nếu bạn muốn làm tròn nó để tính mục đích trước tiên bạn phải nhân float bằng 10^số chữ số sau đó được nhập vào int, thực hiện phép tính và sau đó nhập lại thành float và chia cho cùng một lũy thừa 10

float f=0.66666; 
f *= 1000; // 666.660 
int i = (int)f; // 666 
i = 2*i; // 1332 
f = i; // 1332 
f /= 1000; // 1.332 
printf("%f",f); //1.332000 
Các vấn đề liên quan