Calcolatrice addizione saturata
Sommi due interi tenendo il totale entro una larghezza di bit fissa: 100 + 50 in una parola con segno a 8 bit dà 127 invece di ripartire da un negativo, e la somma esatta, 150, compare accanto. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- A
- 100
- B
- 50
- Bit
- 8
- Risultato
- 127
- Min
- -128
- Max
- 127
- Somma esatta
- 150
L'addizione intera saturata limita la somma matematica di due interi ai valori estremi che ancora entrano in una parola a larghezza fissa scelta, invece di avvolgersi come fa l'aritmetica modulare e la maggior parte dei tipi interi di macchina. Gli ingegneri che verificano kernel DSP, formule di danno nei giochi, canali di colore e contatori di sicurezza necessitano di quel comportamento di limitazione con un minimo e un massimo esatti e un flag saturo inequivocabile. Gli studenti che confrontano l'overflow per wrapping con la saturazione necessitano di un oracolo deterministico che non inventi mai un risultato modulare. Questa calcolatrice di addizione saturata di interi accetta gli addendi a e b, una larghezza di bit da due a sessantaquattro e un flag signed opzionale, e restituisce il risultato limitato, la somma esatta non limitata, l'intervallo rappresentabile e se si è verificata saturazione per overflow o underflow.
Cosa significa l'addizione saturata rispetto all'overflow per wrapping
L'addizione intera ordinaria a larghezza fissa è modulare: quando la somma vera esce dall'intervallo rappresentabile, il risultato di macchina si avvolge riducendo la somma modulo due elevato alla larghezza, il che può saltare da un valore positivo grande a uno negativo grande o da poco sotto zero a un positivo grande.
L'addizione saturata adotta una politica diversa preferita da molti set di istruzioni DSP, codec multimediali e contatori di sicurezza critica: se la somma vera supera il massimo rappresentabile, il risultato diventa quel massimo; se è inferiore al minimo, il risultato diventa quel minimo; altrimenti il risultato coincide con la somma vera. Non avviene wrapping modulare.
Per una larghezza con segno di w bit l'intervallo chiuso va da meno due elevato a w meno uno fino a due elevato a w meno uno, meno uno — l'intervallo classico in complemento a due di int8, int16 e int32. Per larghezza senza segno w l'intervallo va da zero a due elevato a w meno uno.
Questa calcolatrice implementa esattamente quella limitazione: forma la somma intera esatta di a e b con aritmetica BigInt, la confronta con min e max per la larghezza e la signedness scelte, ed emette il risultato limitato insieme a un booleano saturated e a un campo direction con none, overflow o underflow, così i chiamanti possono registrare o ramificare senza ricalcolare da soli i confini.
Dove l'addizione saturata è utile
Gli sviluppatori embedded e DSP usano l'addizione saturata per rispecchiare il comportamento in stile ARM QADD, stadi di pipeline multimediali e accumulatori in virgola fissa senza montare un emulatore completo per un'unica verifica aritmetica. Gli strumenti di colore e audio spesso saturano somme di canale o di campione a otto o sedici bit quando si previsualizzano modalità di fusione prima di impegnare codice shader. Chi insegna la rappresentazione informatica degli interi ha bisogno di un contrasto affiancato tra wrapping modulare e saturazione con numeri riproducibili da int8 a int64.
La convalida fallita non consuma saldo. Mantenga le richieste piccole, fissi result e saturated nei test e otterrà limitazioni riproducibili per compiti, oracoli CI e worker edge senza reinventare tabelle di aritmetica a larghezza fissa.
Casi d'uso
Controlli firmware DSP e virgola fissa
Verifichi l'addizione saturata rispetto ai limiti int8/int16/int32 modellando kernel in stile QADD o accumulatori in virgola fissa senza un emulatore completo.
Limitazione delle risorse in giochi e simulazioni
Limiti somme di salute, danno o punteggio a una larghezza di bit scelta affinché l'overflow saturi al massimo invece di avvolgersi in un valore negativo.
Domande frequenti
In che modo l'addizione saturata di interi differisce dall'overflow normale?
L'addizione a larghezza fissa normale si avvolge (aritmetica modulare). L'addizione saturata limita la somma vera al min o max rappresentabile per la larghezza e la signedness scelte, e non si avvolge mai.
Cosa significano saturated e direction?
saturated è true quando il risultato è stato limitato. direction è overflow se la somma ha superato max, underflow se è scesa sotto min, e none se non serviva limitare.
a o b possono trovarsi fuori dall'intervallo della parola?
Sì. Gli operandi possono essere qualsiasi interi sicuri; solo la somma è limitata al min/max della parola. Ciò corrisponde all'uso comune di calcolatrici e didattica nell'esplorare ingressi fuori intervallo.
Quali larghezze di bit sono supportate?
Qualsiasi larghezza da 2 a 64 bit. Per impostazione predefinita la parola ha il segno, per esempio da −128 a 127 a 8 bit; senza segno l'intervallo parte da zero e arriva a due elevato alla larghezza, meno uno.
Perché limitare invece di lasciare che la somma si avvolga?
Perché un risultato che si avvolge può saltare da un grande valore positivo a un grande valore negativo, una brutta sorpresa nell'audio, nei canali di colore o nei contatori di sicurezza. Limitare ferma il risultato all'estremo più vicino, come fanno molti set di istruzioni DSP e codec multimediali.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/dev/saturating-add \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a":100,"b":50,"bits":8}'const res = await fetch("https://api.kit.forhosting.com/dev/saturating-add", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a": 100,
"b": 50,
"bits": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/saturating-add",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a": 100,
"b": 50,
"bits": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/saturating-add", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a":100,"b":50,"bits":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a":100,"b":50,"bits":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/saturating-add", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"a": 100,
"b": 50,
"bits": 8
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.saturating_add",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Contratto di ingresso, forma della risposta e comportamento di errore
Il campo opzionale signed vale true per impostazione predefinita per una parola con segno in complemento a due; imposti signed a false per un intervallo senza segno che inizia da zero. Stringhe di tipo booleano come true, false, yes, no, signed e unsigned sono accettate per comodità. Abbini la risposta a test unitari propri che fissino i percorsi saturo e non saturo, così regressioni nella logica di limitazione non si infiltrino in un modello di firmware o in un foglio di bilanciamento di gioco. Invii con POST un corpo JSON con i campi obbligatori a e b come interi finiti (numeri JSON o stringhe di cifre con segno iniziale opzionale) il cui valore assoluto resti entro Number.MAX_SAFE_INTEGER, e bits come intero da due a sessantaquattro. Campi mancanti, non interi, bits fuori da due a sessantaquattro e valori non booleani di signed falliscono con invalid_input indicando il problema; tali fallimenti non vengono fatturati. In caso di successo il corpo ripete a, b, bits e signed; riporta min e max della parola; riporta sum_exact come somma matematica non limitata; riporta result come valore limitato; imposta saturated a true quando è avvenuta la limitazione; e fissa direction a none, overflow o underflow. I valori che superano gli interi sicuri di JavaScript agli estremi dell'intervallo o nella somma esatta vengono emessi come stringhe decimali affinché il JSON resti esatto. Esempio: a uguale a cento, b uguale a cinquanta, bits uguale a otto, signed true produce min meno centoventotto, max centoventisette, sum_exact centocinquanta, result centoventisette, saturated true e direction overflow — il caso classico di addizione saturata int8.
Dove un'API di addizione saturata di interi dimostra il proprio valore
Autori di giochi e simulazioni limitano salute, danno e contatori di risorse affinché l'overflow non avvolga mai una barra quasi piena in un valore negativo o quasi zero; una calcolatrice pubblica e un'API rendono quelle regole di limitazione revisionabili nella documentazione di progetto. Poiché l'implementazione è parse di livello A puro, ogni chiamata riuscita costa il prezzo base pubblicato $0.002 senza token di modello e senza rete in uscita.
Casi di integrazione
Dimostrazioni in aula: overflow contro saturazione
Mostri agli studenti la differenza tra wrapping modulare e limitazione saturata con min, max, sum_exact e result deterministici per qualsiasi larghezza 2–64.
Domande tecniche
Quali larghezze di bit e modalità con segno sono supportate?
bits deve essere un intero da 2 a 64. signed vale true per impostazione predefinita (intervallo in complemento a due). Imposti signed false per l'intervallo senza segno [0, 2^bits−1].
Quanto costa la calcolatrice di addizione saturata di interi?
Lo strumento nel browser è gratuito. Le richieste API usano il saldo KIT prepagato a $0.002 per chiamata riuscita; l'ingresso non valido non viene fatturato.