Torna indietro   Hardware Upgrade Forum > Software > Programmazione

realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-05-2010, 19:49   #1
marcurs
Senior Member
 
L'Avatar di marcurs
 
Iscritto dal: Aug 2004
Messaggi: 693
[C] Banale moltiplicazione e divisione

Codice:
uint16_t 
calcolak(uint16_t frequenza){
	uint16_t k;
	k=frequenza*16834/14343;
	return k;
}
Ho un "piccolo" problemino con questa funzione: In sostanza non capisco il perchè durante il debug vedo che la funzione non riesce a fare correttamente l'operazione, ma alla fine restituisce il valore k sballato (quasi sempre 2 o 0).

Dove sta il problema?

P.S. uint16_t sta per una variabile int senza segno a 16bit (si trova in stdint.h)
__________________
Marco

Ultima modifica di marcurs : 06-05-2010 alle 19:59.
marcurs è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 20:10   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
overflow.
Puoi passare a 32 bit internamente per il calcolo, per poi restituire di nuovo 16 bit.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 20:18   #3
marcurs
Senior Member
 
L'Avatar di marcurs
 
Iscritto dal: Aug 2004
Messaggi: 693
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
overflow.
Puoi passare a 32 bit internamente per il calcolo, per poi restituire di nuovo 16 bit.
Intanto grazie...
Era quello che pensavo pure io, avevo provato a modificare il codice inserendo una nuova variabile a 32bit per fare i conti e successivamente effettuare la conversione a 16, ma il risultato non cambiava..
Codice:
uint16_t 
calcolak(uint16_t freq){
	uint32_t ff;
	uint16_t k;
	ff=freq;
	k=(uint16_t)ff*16834/14343;
	return k;
}
in questo caso il k mi viene 3 (con un k maggiore di 3000)
mah...
__________________
Marco
marcurs è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 20:19   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Prova cosi'
Codice:
uint16_t 
calcolak(uint16_t freq){
	uint32_t ff;
	uint16_t k;
	ff=freq;
        ff=(ff*16834)/14343;
	k=(uint16_t)ff;
	return k;
}
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 06-05-2010 alle 20:22.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 20:21   #5
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13043
Scusa ma il tuo k deve essere intero? Ma soprattutto, come fai a sapere che il risultato di quell'operazione venga esattamente intero?

La divisione tra interi ti restituisce solo il quoziente.

Poi 16834/14343 potresti risolverla come una costante il cui valore è circa 1,174 (approssimato).
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 20:33   #6
marcurs
Senior Member
 
L'Avatar di marcurs
 
Iscritto dal: Aug 2004
Messaggi: 693
Ok, ora funziona grazie!
Allora dov'è che sbagliavo? la parentesi di conversione agisce solo sul ff adiacente e non su tutta l'operazione?
__________________
Marco
marcurs è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 20:34   #7
marcurs
Senior Member
 
L'Avatar di marcurs
 
Iscritto dal: Aug 2004
Messaggi: 693
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Scusa ma il tuo k deve essere intero? Ma soprattutto, come fai a sapere che il risultato di quell'operazione venga esattamente intero?

La divisione tra interi ti restituisce solo il quoziente.

Poi 16834/14343 potresti risolverla come una costante il cui valore è circa 1,174 (approssimato).
Il risultato dell'operazione non verrà mai intero, lo so, ma mi interessa un'approssimazione e il troncamento all'intero mi dovrebbe bastare.
__________________
Marco
marcurs è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 20:41   #8
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13043
Quote:
Originariamente inviato da marcurs Guarda i messaggi
Il risultato dell'operazione non verrà mai intero, lo so, ma mi interessa un'approssimazione e il troncamento all'intero mi dovrebbe bastare.
Tu prova così:

Codice:
uint32_t calcolak(uint16_t frequenza)
{
    return frequenza*16834/14343.0;
}
Oppure come ti dicevo prima:

Codice:
uint32_t calcolak(uint16_t frequenza)
{
    return frequenza*1.174;
}
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2010, 21:26   #9
marcurs
Senior Member
 
L'Avatar di marcurs
 
Iscritto dal: Aug 2004
Messaggi: 693
La soluzione di gugoXX funziona perfettamente
Il risultato della funzione deve rimanere a 16 bit.
Grazie comunque a tutti quanti!
__________________
Marco
marcurs è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Il nuovo CTO di Disney arriva da Charact...
GDPR, Google multata per 403 milioni di ...
Quattro token al secondo senza GPU: GLM ...
iPhone 18 Pro, sostituire la batteria fu...
I satelliti Starlink V3 potranno raggiun...
Linux-AI OS 1.0 'Star': l'IA entra nel d...
Samsung Galaxy S27 Pro e Ultra: buona au...
Castlevania: Belmont's Curse avrà una de...
L'attrice AI Tilly Norwood va in tilt du...
MediaTek Dimensity 9600M: come il 9500 m...
25 mila taxi a guida autonoma per l'Euro...
La Space Force statunitense annuncia il ...
Acer: prezzi dei PC ancora in salita, il...
HONOR come Xiaomi: smartphone con displa...
Recensione Turtle Beach Stealth Pro II: ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:39.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v