我的编译器告诉我,sizeof(long double)
的大小是16字节,这意味着它可以表示一个数字2^128
。现在,我想知道精度可以处理多少位数。例如,如果x= 0.1234567812345678
,可以long double
这里确定x
的确切精度?如何识别long double数据类型的精度
谢谢
我的编译器告诉我,sizeof(long double)
的大小是16字节,这意味着它可以表示一个数字2^128
。现在,我想知道精度可以处理多少位数。例如,如果x= 0.1234567812345678
,可以long double
这里确定x
的确切精度?如何识别long double数据类型的精度
谢谢
我想知道,直到有多少数字的精度可以处理。
LDBL_DIG
,在<float.h>
,是显著十进制数字最小数目将从文本转换为long double
区别的数量。在你的平台上,它至少有10个,可能是18个左右。 0.1234567812345678
和123.4567812345678
有16位重要的十进制数字。
我的编译器告诉我的sizeof的大小(长双)为16字节,这意味着它可以代表人数多达2^128
这可能意味着类似的东西如果long double
是一个整数,但浮点数分布为logarithmically。此外,有些系统不会将全部16个字节用于数据。有些是填充。 @unwind@Sven Marnach。使用<float.h>
中的值来表征您的平台正在使用的long double
。
如果
x= 0.1234567812345678
,可以long double
识别x
准确精度?
不,除非您在使用十进制浮点的罕见平台上。
大多数平台使用二进制浮点。因此,除非数字可以表示为2的幂的精确和,例如42.125,否则保存为long double
的值将为近似值。代码将文本0.1234567812345678
转换为最近的long double
,其可能具有精确值0.1234567812345677972896140772718354128301143646240234375
。
非常感谢。清晰准确的答案:) – Medo
的header float.h
包含一些宏desribing不同的浮点数据类型的精度;例如LDBL_MANT_DIG
为您提供long double
的尾数中的二进制数字数。
如果您不了解浮点数的格式,我建议您阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic。
简洁的回答:详细说明'LDBL_MANT_DIG'的小数位数,它们是_usually_二进制数。 – chux
“[[]]这意味着它可以代表一个数字2^128” - 呃不,它不是你知道的整数。所有位不可用于存储整数部分。 – unwind
请注意,实际的浮点数可能只有80位(如果您在x86上)。编译器保留128位进行对齐。 –