定义浮点常量,有多少位有用?

时间:2012-02-16 15:42:43

标签: c floating-point

当我在C中定义无法在十进制系统中准确表示的常量时,例如π,编译器将考虑多少位数来实际创建float或{记忆中的{1}}

例如:

double

4 个答案:

答案 0 :(得分:2)

尽可能多地使用数字(在合理范围内:上面的浮点PI_F可以)。如果它的数据多于类型可以容纳的数据,编译器将删除多余的数据;如果它少了,你会很乐意写下你所知道的一切。

答案 1 :(得分:2)

假设现在常见的IEEE 754 standard floating point numbersfloat的精确度约为7.22,double的精确度约为15.95,因此对于小数点后的7位数floatπ常数和double为安全的15。 128位long double给出34.02精度,因此在π的小数点后面有33个位置。(*)

然而,过高的精度不会受到影响,编译器会简单地将其切断。

(*)注意long double通常不是IEEE格式; x86-32通常具有80位,而不是128位long double。在MSVC中,apparentlydouble的同义词,因此是64位。

答案 2 :(得分:0)

假设您有32位浮点数和64位双精度数, "Floats are good for 6 digits of accuracy but doubles offer 15."

答案 3 :(得分:-2)

“正常”数学常数在C头中定义,如M_PI等。对于他们来说,最好使用系统提供的值。为他人;如果它们的计算/近似值相当便宜,那么在程序中执行该操作以获得稳健性,或者将它们计算出来(超过)所需的精度并复制该值。

顺便说一句,对于几乎所有“真实世界”使用3或4位数的精度来说都是充足的,不要过于烦恼。