2012-02-09 103 views
11

有人可以解释我如何选择具有C函数的浮点精度?如何设置浮点精度

例子:

theFatFunction(0.666666666, 3)收益:0.667

theFatFunction(0.111111111, 3)收益:0.111

+2

的可能重复的相同的功率[舍入数为2位小数在C](HTTP: //stackoverflow.com/questions/1343890/rounding-number-to-2-decimal-places-in-c) – 2012-02-09 15:11:00

回答

12

由于精度取决于数据类型(即floatdoubledoublelong double),所以不能这样做。如果您想将其用于打印目的,则可以使用printf()中的适当格式说明符,即printf("%0.3f\n", 0.666666666)

2

你不能。精度完全取决于数据类型。你有floatdouble就是这样。

2

浮动具有静态的,固定的精度。你不能改变它。你有时可以做的是围绕这个数字。

请参阅this page,并考虑按照10的幂度量自己。请注意,并非所有数字都可以精确地表示为浮点数。

+0

你可以做floor(x * 100)/100.0 – 2012-02-09 15:12:15

1

大多数系统遵循IEEE-754浮点标准,该标准定义了几种浮点类型。

在这些系统上,通常float是IEEE-754 binary32单精度类型:它具有24位的精度。 doublebinary64双精度型;它具有53位的精度。位数的精度由IEEE-754标准定义,不能改变。

使用fprintf系列的函数(例如,printf)打印浮点类型的值时,精度被定义为最大有效位数,默认情况下被设置为6位数。您可以在转换规范中使用.后跟一个十进制数来更改默认精度。例如:

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

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

精度由数据类型(即浮动或双或双长)来确定。

如果你想详谈印刷的目的,你可以使用printf的)正确的格式说明(即

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

现在,如果你想详谈计算,你必须先乘目的浮子10 ^的位数然后类型转换为int,执行计算,然后再次类型转换浮起并除以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