Wrong result when comparing a negative BigInt with a negative float
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Inizia leggendo js_bigint_float64_cmp nel codice sorgente di QuickJS, concentrandoti sul confronto degli esponenti e sul ramo esistente della mantissa. Riproduci i quattro confronti negativi tra BigInt e float dell’issue, poi verifica tutti gli operatori relazionali. Il lavoro è completato quando questi casi corrispondono a Node e alla specifica.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Comparing a negative BigInt with a negative float gives the wrong answer when their binary exponents differ.
Tested on master (19d6bd8):
console.log(-0.5 < -1n); // true, expected false
console.log(-1n > -0.5); // true, expected false
console.log(-2147483648 < -1n); // false, expected true
console.log(-1n < -2147483648); // true, expected false
Node and the spec give the expected values. All relational operators are affected.
In js_bigint_float64_cmp, when both numbers have the same sign and their exponents differ, the result is -1 for f < e whatever the sign. For two negative numbers the one with the smaller exponent is the larger number. The mantissa branch just below already takes the sign into account. A fix that makes all four cases above match Node:
@@ static int js_bigint_float64_cmp(JSContext *ctx, const JSBigInt *a,
a_mant = js_bigint_get_mant_exp(ctx, &f, a);
if (f != e) {
if (f < e)
- return -1;
+ return 2 * a_sign - 1;
else
- return 1;
+ return 1 - 2 * a_sign;
} else {
- Lingua principale
- C
- Stelle
- 11.1k
- Fork
- 1.2k
- Merge medio
- 11h 20m
- PR unite (30g)
- 1
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di bellard/quickjs
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 15/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 22/100
-
Collecting WeakMap keys requires multiple GC passesForse già presa @jluxenberg l’ha presa 4 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
-
Difficoltà 4/5 1-2 giorni Idoneità per principianti 48/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 58/100
Tutte le issue di bellard/quickjs
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
STMicroelectronics/STSELib#128 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
CCExtractor/ccextractor#2440 ·
I maintainer di solito rispondono entro 2 giorni
-
LSP: Invalid buffer id in previous_result_ids during workspace/diagnostic/refreshForse già presa @sharky720 l’ha presa oggi. Apertadiagnostic lsp
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
neovim/neovim#42629 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
c first-contributor first-contributors good first issue help wanted medium up-for-grabs
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
fork-commit-merge/fork-commit-merge#8539 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno