gpt4 book ai didi

assembly - 向 -Inf : how does it work? 舍入的快速浮点到整数公式

转载 作者:行者123 更新时间:2023-12-05 04:45:52 27 4
gpt4 key购买 nike

我一直在玩 x87 FPU 编程,我刚刚遇到以下从 float(32 位)转换为 int(32 位)的魔法:

    flds    from             # number to convert from
fadds magic1 # add magic number 1 (???)
fstps to # store in destination as single-precision binary32
movl to,%eax # load float result as an int
subl $magic2,%eax # subtract magic number 2 (???)
sarl $1,%eax # divide by 2
movl %eax,to # and look, here's the result!

.section .rodata
magic1: .float 6291456.0 # 3 * 2^21
.equ magic2, 0x4ac00000 # ???

.data
from: .float 31415.9265 # pick a number, any number...
to: .long 0 # result ends up here

(带有 GAS 指令的 AT&T 语法)

我已经试过了,它似乎有效(四舍五入到 -infinity),但我完全不知道为什么!谁能解释一下它是如何工作的?

最佳答案

快速回答:

第一个神奇的数字强制重新缩放参数,以便整数部分的 LSbit 在小数部分变为最右边但只有一个。

然后添加第二个魔法将删除指数位。

关于最后除以 2 IDK 的必要性,必须有一个额外的技术问题(可能与添加 3.2^21 而不是 1.2^21 有关)。

关于assembly - 向 -Inf : how does it work? 舍入的快速浮点到整数公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69030824/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com