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

标签 c floating-point

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

例如:

/* Overkill? */
const float PI_F = 3.1415926535897932384626433832795f;

/* Too few digits? */
const double PI_D = 3.14159;

最佳答案

假设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 位。

关于c - 定义浮点常量,多少位有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9314257/

相关文章:

c - 检测到 glibc - 在 C 程序中释放(int ** 类型)时出现双重释放或损坏消息

c++ - 在静态控件上绘制图像

c - 从 c 中不兼容的指针类型赋值,用于指向结构的指针

php - 在 PHP 中将值数组转换为单个浮点值?

创建一个简单的 shell 我的 for 循环为每个要读入的单词创建一个单独的进程

c - Shell 文本处理库

c# - 为什么我可以将 0.0 分配给枚举值,而不是 1.0

vba - 从 VBA 中的 IEEE-754 double 中提取尾数、指数和符号数据

visual-c++ - 比较两个 double 的符号

python - "rounding"python中的负指数