如何设置浮点数的精度

时间:2012-02-09 15:08:09

标签: c floating-point precision

有人可以解释一下如何用C函数选择浮点数的精度吗?

示例:

theFatFunction(0.666666666, 3)返回0.667

theFatFunction(0.111111111, 3)返回0.111

6 个答案:

答案 0 :(得分:13)

您不能这样做,因为精确度取决于数据类型(即floatdoublelong double)。如果要将其舍入以进行打印,可以使用printf()中的正确格式说明符,即printf("%0.3f\n", 0.666666666)

答案 1 :(得分:2)

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

答案 2 :(得分:2)

浮点数具有静态,固定的精度。你无法改变它。你有时可以做的是围绕数字。

请参阅this page,并考虑使用10的幂来扩展自己。请注意,并非所有数字都可以完全表示为浮点数。

答案 3 :(得分: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

答案 4 :(得分:0)

精度由数据类型决定(即float或double或long double)。

如果要将其舍入以进行打印,可以在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

答案 5 :(得分:0)

大概是以下步骤:

  1. 用0.0005添加0.666666666(我们得到0.667166666)
  2. 乘以1000(我们得到667.166666)
  3. 将数字转换为整数(我们得到667)
  4. 将其移回浮动状态(我们得到667.0)
  5. 除以1000(我们得到0.667)

谢谢。