Torna indietro   Hardware Upgrade Forum > Software > Programmazione

PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-12-2011, 17:18   #1
Ben Echmeyer
Junior Member
 
Iscritto dal: Nov 2011
Messaggi: 5
[C] calcolo fattoriale

Salve, ho un problema nello scrivere un programma in cosole che calcoli il fattoriale, quando lo avvio lo calcola esatto fino a 12 ma con numeri più alti da risultati sbagliati oppure "0", questo è codice che ho usato:

Codice:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
long int fattoriale(int n);

using namespace std;
long int a, n;
int scelta;

int main(void)
{
    do{
        printf("Inserire un numero per calcolarne il fattoriale \n");
        scanf("%i", &a);
        printf("Risultato: %i\n", fattoriale(a));
        printf("premere 0 per uscire o un numero qualsiasi per ripere il programma\n");
        scanf("%i", &scelta);
    }
    while(scelta!=0);
}

long int fattoriale(int n)
{
    if(n==0) return(1);
    else return n* fattoriale(n-1);
}
Sapete indicarmi l'errore? grazie in anticipo
Ben Echmeyer è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2011, 17:40   #2
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 246
Ciao, il tipo long int in C mi pare sia su 32 bit ma il risultato di 13 fattoriale non entra in 32 bit... Puoi provare ad utilizzare double (8 byte di solito) anzichè long int così allarghi l'intervallo di valori "calcolabili"
__________________
Non c'è cosa peggiore nella vita di un programmatore di un errore che si presenta solo ogni tanto.

CONCLUSO POSITIVAMENTE CON: oldfield
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2011, 17:46   #3
Ben Echmeyer
Junior Member
 
Iscritto dal: Nov 2011
Messaggi: 5
non ci avevo pensato! grazie!
Ben Echmeyer è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2011, 23:50   #4
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Fatti restituire un unsigned long e stai apposto per un bel pezzo
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2011, 12:35   #5
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da clockover Guarda i messaggi
Fatti restituire un unsigned long e stai apposto per un bel pezzo
quoto, è sicuramente quello il problema!
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2011, 15:21   #6
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12966
In C long è a 32 bit, long long è presente dallo standard C99 e ti consente di memorizzare interi a 64bit.

Alternativamente puoi usare un double.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2011, 21:37   #7
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
In C long è a 32 bit, long long è presente dallo standard C99 e ti consente di memorizzare interi a 64bit.

Alternativamente puoi usare un double.
hai ragione... long long è a 64 bit

comunque meglio sempre usare un metodo iterativo che uno ricorsivo, anche se il fattoriale ricorsivo si fa con una riga
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2011, 14:08   #8
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da clockover Guarda i messaggi
hai ragione... long long è a 64 bit

comunque meglio sempre usare un metodo iterativo che uno ricorsivo, anche se il fattoriale ricorsivo si fa con una riga
e perche' mai ?
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2011, 14:13   #9
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da marco.r Guarda i messaggi
e perche' mai ?
perchè la ricorsione spreca più memoria, serve un record di attivazione per ogni chiamata , il che vuol dire che il metodo iterativo produce meno garbage anche se è molto più lungo!
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2011, 14:15   #10
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Il metodo iterativo è più veloce... sempre. Nel caso del fattoriale non c'è nessun problema, ma diciamo che in generale è preferibile sempre un metodo iterativo. Inoltre per metodi (o funzioni) che richiedono uno stack elevato si rischia anche di occupare troppa memoria e far crashare il programma.
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2011, 14:16   #11
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da tecno789 Guarda i messaggi
perchè la ricorsione spreca più memoria, serve un record di attivazione per ogni chiamata , il che vuol dire che il metodo iterativo produce meno garbage anche se è molto più lungo!
appunto
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2011, 14:37   #12
Rsk
Senior Member
 
L'Avatar di Rsk
 
Iscritto dal: Dec 2006
Messaggi: 314
Quote:
Originariamente inviato da tecno789 Guarda i messaggi
perchè la ricorsione spreca più memoria, serve un record di attivazione per ogni chiamata , il che vuol dire che il metodo iterativo produce meno garbage anche se è molto più lungo!
Altrimenti si può fare così

Tail recursive
Codice:
long fact(long res, long n){
if n==1 return res
return fact(res*n,n-1)
}
__________________
Athlon64 x2 5600 - AsRock ALiveNF5eSata2+ - kingston 2GB ddr2 800 - GeForce 8800gts 320MB

Ultima modifica di Rsk : 27-12-2011 alle 09:44.
Rsk è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2011, 14:47   #13
GByTe87
Senior Member
 
L'Avatar di GByTe87
 
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
Quote:
Originariamente inviato da tecno789 Guarda i messaggi
...il metodo iterativo produce meno garbage anche se è molto più lungo!
int n = 6, f;
for (f = n, n--; n > 0; f *= n--);

Due righe.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO
GByTe87 è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2011, 15:04   #14
L4ky
Senior Member
 
L'Avatar di L4ky
 
Iscritto dal: May 2008
Messaggi: 1566
Puoi recuperare ancora un bit facendo:
Codice:
unsigned long long int x;
__________________
CM Obsidian 750D - Corsair TX650M - AMD Ryzen 7 3700x - Asus TUF B550-PLUS - nVidia Gigabyte GTX 1060 6GB G1 Gaming - Noctua D15S - Corsair Vengeance Pro 3600MHz 16GB - 2xHP x27i - Razer Deathadder - Logitech G15 v1 nVidia Edition- Roccat Taito King-Size - Fastweb (2011) | Alice(2015) | Alice(2016) | Eolo 30Mb (2016) | Wind3 4G Flat (2019) | PF AIR 100 (2021)
L4ky è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2011, 15:16   #15
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da GByTe87 Guarda i messaggi
int n = 6, f;
for (f = n, n--; n > 0; f *= n--);

Due righe.
bravo.. io sono riuscito a farlo solo in 3
peccato che la ricorsione sia solo 1

comunque era ironico
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 26-12-2011, 17:38   #16
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da tecno789 Guarda i messaggi
perchè la ricorsione spreca più memoria, serve un record di attivazione per ogni chiamata , il che vuol dire che il metodo iterativo produce meno garbage anche se è molto più lungo!
Non e' detto. L'unico difetto puo' essere l'esaurimento dello stack, evitabile se il linguaggio e/o il compilatore supporta le ottimizzazioni per la tail recursion (se ricordo bene gcc dovrebbe farlo).
Per quel che riguarda le performance, anche in un esempio semplice come il fattoriale oltre ad un certo punto la cpu passa ben poco tempo nella creazione e cancellazione dello stack di attivazione, quanto a gestire numeri di lunghezza arbitraria.
Non mi viene in mente un esempio piu' semplice al momento, ma se a qualcuno viene in mente possiamo vedere.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 12:09   #17
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Non e' detto. L'unico difetto puo' essere l'esaurimento dello stack, evitabile se il linguaggio e/o il compilatore supporta le ottimizzazioni per la tail recursion (se ricordo bene gcc dovrebbe farlo).
Per quel che riguarda le performance, anche in un esempio semplice come il fattoriale oltre ad un certo punto la cpu passa ben poco tempo nella creazione e cancellazione dello stack di attivazione, quanto a gestire numeri di lunghezza arbitraria.
Non mi viene in mente un esempio piu' semplice al momento, ma se a qualcuno viene in mente possiamo vedere.
il problema non si pone per quanto riguarda le performance visto che il programma è abbastanza corto, ma si pone per la memoria. Ora prendi lo stesso programma fatto in modo iterativo e in modo ricorsivo, compilali e avviali e guarda quanta memoria utilizzano, noterai con molto piacere che quello con la ricorsione utilizza un pò più di memoria, se hai una ram da 512 kb devi stare molto attento
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2011, 23:32   #18
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da tecno789 Guarda i messaggi
il problema non si pone per quanto riguarda le performance visto che il programma è abbastanza corto, ma si pone per la memoria. Ora prendi lo stesso programma fatto in modo iterativo e in modo ricorsivo, compilali e avviali e guarda quanta memoria utilizzano, noterai con molto piacere che quello con la ricorsione utilizza un pò più di memoria, se hai una ram da 512 kb devi stare molto attento
Una chiamata ricorsiva con tail call ottimizzata consuma spazio costante sullo stack. Ovviamente occorre che ci sia effettivamente la tail call, e nel caso del fattoriale non e' molto pratico. Ma visto che se ne faceva un discorso generale...
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 28-12-2011, 01:44   #19
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Una chiamata ricorsiva con tail call ottimizzata consuma spazio costante sullo stack. Ovviamente occorre che ci sia effettivamente la tail call, e nel caso del fattoriale non e' molto pratico. Ma visto che se ne faceva un discorso generale...
capisco...no ma infatti non ho detto niente, ho esposto quanto da me studiato e cerco sempre di imparare cose nuove, quello che tu mi hai detto non lo sapevo.
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 28-12-2011, 11:53   #20
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Per il calcolo del fattoriale bisognerebbe usare una variabile intera perchè per definizione il fattoriale è una funzione da naturale a naturale quindi un unsigned long sarebbe la scelta più coerente "matematicamente".
Tuttavia anche con un unsigned long, raggiungi l'overflow molto presto.
Il long double è assolutamente più capiente in quanto la virgola mobile usa una notazione approssimata esprimendo il valore come mantissa e esponente. Però proprio questa approssimazione, che tipicamente non è esatta nemmeno per valori interi, ti darà un risultato del fattoriale approssimato.
L'alternativa è usare librerie ad-hoc come http://gmplib.org/
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Android 17 Beta 3 è qui: ecco cosa cambi...
FOSSiBOT F1800 e F2400 in offerta: energ...
S.T.A.L.K.E.R. 2 si espande con il DLC C...
Svolta IA per WhatsApp: i messaggi si sc...
Hades 2: annunciata la data d'uscita su ...
Tapo in offerta su Amazon: le migliori o...
Scontro tra Anthropic e Pentagono: un gi...
La crisi delle memorie colpisce anche le...
Molti videogiocatori stanno scommettendo...
Tablet da 11 pollici in offerta su Amazo...
Samsung prepara il lancio di due nuovi F...
Sviluppare un gioco AAA sta diventando s...
Google anticipa il Q-Day al 2029: i comp...
Fastweb prepara il lancio di un nuovo br...
Crescita record per il settore dei monit...
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: 10:16.


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