当我在C中定义无法在十进制系统中准确表示的常量时,例如π
,编译器将考虑多少位数来实际创建float
或{记忆中的{1}}
例如:
double
答案 0 :(得分:2)
尽可能多地使用数字(在合理范围内:上面的浮点PI_F
可以)。如果它的数据多于类型可以容纳的数据,编译器将删除多余的数据;如果它少了,你会很乐意写下你所知道的一切。
答案 1 :(得分:2)
假设现在常见的IEEE 754 standard floating point numbers,float
的精确度约为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中,apparently是double
的同义词,因此是64位。
答案 2 :(得分:0)
假设您有32位浮点数和64位双精度数, "Floats are good for 6 digits of accuracy but doubles offer 15."
答案 3 :(得分:-2)
“正常”数学常数在C头中定义,如M_PI等。对于他们来说,最好使用系统提供的值。为他人;如果它们的计算/近似值相当便宜,那么在程序中执行该操作以获得稳健性,或者将它们计算出来(超过)所需的精度并复制该值。
顺便说一句,对于几乎所有“真实世界”使用3或4位数的精度来说都是充足的,不要过于烦恼。