虽然很简单,但我无法通过谷歌搜索找到它。我们知道浮点表示支持更大范围的数字,并且操作比纯整数慢。我们也知道如何使用尾数和指数来表示浮点。但我的问题是,比如说,在一个32位系统中,s * b ^ e输出是否超过32位或32位? (其中s =有效数,b =基数,e =指数)
答案 0 :(得分:0)
用于表示尾数的精确位数和浮点数的指数因CPU而异,因此问题肯定取决于架构。
有一个非常显性的标准:IEEE Floating Point,根据this related SO question,您今天可能遇到的所有主要CPU都会实现它,包括IA32。
根据维基百科,IEEE浮点要求在任何实施中至少有以下一项可用:
假设32位是指IA 32 family(这只是少数使用32位的架构之一),那么浮点寄存器can contain up to 80 bits,意思是,binary32,binary64和a可以支持具有15个指数位的非IEC 80位格式。为区分32位和64位指令,大多数汇编程序使用QWORD
或DWORD
等大小修饰符。
此外,除了CPU实现,语言还需要符合IEEE浮点。例如,在C语言中,附件7规定如果编译器自动定义宏__STDC_IEC_599__
,则float
保证为binary32和double
binary64。 long double
不固定为IEC,因此它可以在IA32拱门上使用80位。