Power ISA中fadd与fadds指令的差异咨询及异常结果疑问
搞懂Power ISA中
fadd和fadds的区别(以及你的结果为0的问题) 先明确两者最核心的差异:
fadd是双精度(64位)浮点加法指令,它会使用浮点寄存器的全部64位内容进行计算。fadds是单精度(32位)浮点加法指令,重点来了——Power ISA是大端架构,单精度指令只会读取浮点寄存器的高32位,低32位会被完全忽略。
你的问题根源就在于你把{0,0,1,0}这个字节序列存入寄存器的方式,咱们拆解来看:
用
fadd时:
指令会把整个64位寄存器当成双精度浮点数处理。你存的{0,0,1,0}应该是放在了寄存器的低32位,高32位被补成了0。这个64位的双精度值本身是一个极小的正数,相加之后得到约1.7014e-308,和你预期的结果一致。用
fadds时:
指令只看寄存器的高32位。如果你把{0,0,1,0}存在低32位,那高32位全是0,相当于fadds在做0.0+0.0的单精度加法,结果自然是0。
如果你想验证这个结论,可以试着把{0,0,1,0}存入浮点寄存器的高32位,再运行fadds,此时应该就能得到符合预期的单精度加法结果(原极小值的两倍)。
内容的提问来源于stack exchange,提问作者shb8086
相关产品推荐
相关产品推荐

