【发布时间】:2012-02-09 15:08:09
【问题描述】:
谁能解释一下如何使用 C 函数选择浮点数的精度?
例子:
theFatFunction(0.666666666, 3) 返回 0.667
theFatFunction(0.111111111, 3) 返回 0.111
【问题讨论】:
标签: c floating-point precision
谁能解释一下如何使用 C 函数选择浮点数的精度?
例子:
theFatFunction(0.666666666, 3) 返回 0.667
theFatFunction(0.111111111, 3) 返回 0.111
【问题讨论】:
标签: c floating-point precision
您不能这样做,因为精度取决于数据类型(即float 或double 或long double)。如果您想将其四舍五入以进行打印,您可以在printf() 中使用正确的格式说明符,即printf("%0.3f\n", 0.666666666)。
【讨论】:
你不能。精度完全取决于数据类型。你有 float 和 double 就是这样。
【讨论】:
浮点数具有静态、固定的精度。你不能改变它。有时您可以做的是对数字进行四舍五入。
请参阅 this page,并考虑按 10 的幂进行缩放。请注意,并非所有数字都可以精确地表示为浮点数。
【讨论】:
大多数系统都遵循 IEEE-754 浮点标准,该标准定义了几种浮点类型。
在这些系统上,float 通常是 IEEE-754 binary32 单精度类型:它具有 24 位精度。 double 是 binary64 双精度类型;它具有 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
【讨论】:
大概有以下几个步骤:
谢谢。
【讨论】:
精度由数据类型决定(即 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
【讨论】: