出于某种原因,当我在汇编中比较两个双精度浮点数时,它们是相等的,直到它们参与了几次加法运算,它们才相等。
global _start
section .data
a: dq 1.0
b: dq 0.5
c: dq 0.1
msg: db "Equal!", 10, 0
msg_len equ $-msg
section .text
_start:
.loop:
movsd xmm0, qword [b]
addsd xmm0, qword [c]
movsd qword [b], xmm0
movsd xmm0, qword [b]
ucomisd xmm0, qword [a]
jb .loop
movsd xmm0, qword [b]
ucomisd xmm0, qword [a]
je .equal
jmp .exit
.equal:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
.exit:
mov rax, 60
xor rdi, rdi
syscall
1条答案
按热度按时间hujrc8aj1#
我一直知道双精度值并不精确,但我从未想过对它们进行四舍五入,然后比较它们,这很有效。