|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
[Visual C++] Creare una Look-Up Table
Salve
devo risolvere a breve un problema per me gravissimo... il mio programma legge dei valori da un array, in pratica creo una lookup table della radice quadrata e leggo così i valori... finora ho dichiarato una variabile globale static float SQRTTAB[32768]; e la caricavo così unsigned short val; for (val=0;val<32768,++val) SQRTTAB[val] = (float)sqrt((double)val); però quando la uso, mi ritrovo tutti zeri all'interno.... come devo fare?
__________________
ho fatto affari con: na decina di anime ![]() |
![]() |
![]() |
![]() |
#2 | |
Member
Iscritto dal: May 2005
Messaggi: 80
|
Butto là una risposta:
considerando che la dichiarazione della funzione radice quadrata è double sqrt(double x); float sqrtf(float x); long double sqrtl(long double x); mentre te hai scritto Quote:
|
|
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ma guarda te se ancora oggi devo vedere usati sti trucchetti da PC Underground!!!
![]() mitico libro che era quello... ![]() |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: May 2005
Messaggi: 80
|
Ho cliccato il link a pcunderground e mi ha incuriosito.
Se l'hai letto mi puoi dare per favore qualche esempio di argomento trattato? In questo momento sto debuggando qualche migliaio di righe di codice c++ e, anche se applico poco e male le buone tecniche di programmazione, sono convinto che in c++ senza conoscere trucchetti pratici non si va da nessuna parte. ![]() Ciao |
![]() |
![]() |
![]() |
#5 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
comunque si tratta di un libro che oggi non leggerebbe più nessuno: è dei tempi di Windows 95 e tratta argomenti e tecniche di programmazione spesso mirate su un risparmio di risorse che con l'hardware di oggi chiunque con un po' di buonsenso considererebbe veramente maniacale ![]() parla molto di programmazione assembly; io quando lo lessi mi interessavo di grafica, e così mi interessava particolarmente il capitolo dove parlava della VGA standard: descriveva ranges di memoria e di IO della VGA e insegnava ad usarla IN ASSEMBLY x86!!! ![]() ![]() ![]() a volte metteva addirittura pezzi di assembly in programmi Pascal... oggi credo che quei programmetti neanche funzionerebbero più in modalità protetta... provando ad eseguirli dal CD fornito col libro ricordo che andavano perfettamente su Windows 98 ma già col 2000 qualcuno aveva problemi. questa storia della tabella delle radici quadrate mi ha ricordato quel libro perché a un certo punto il libro parlando di grafica 3D e parlando di come realizzare le rotazioni, per velocizzare il calcolo di seno e coseno anziché calcolarli lì sul momento ne calcolava tantissimi che metteva poi in una tabella ![]() ovviamente tutto in assembly ![]() ![]() roba da masochisti, ti posso veramente assicurare che programmare a quel modo con l'hardware di oggi è assurdo. |
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: May 2005
Messaggi: 80
|
Mi sono espresso male dicendo trucchetti, forse era meglio dire esperienza di programmazione spicciola.
Per fare un esempio, nel programma che sto debuggando ci sono blocchi di codice che devono leggere stringhe, ed eseguire operazioni differenti a seconda di ciò che le stringhe contengono. Con la stringa "boolA=false" nel codice seguente viene eseguito l'if iniziale !!!!! Codice:
if ( ((_action.find_last_of("true")) > (_action.size()-6)) && ((_action.find_last_of("true")) > equalPosition) ) { ................................... } else if ( ((_action.find_last_of("false")) > (_action.size()-7)) && ((_action.find_last_of("false")) > equalPosition) ) { ..................................... } Codice:
if ( ((_action.find_last_of("true")) > (_action.size()-6)) && ((_action.find_last_of("true")) > equalPosition) && ((_action.find("false")) == string::npos) ) { .................................... } else if ( ((_action.find_last_of("false")) > (_action.size()-7)) && ((_action.find_last_of("false")) > equalPosition) && ((_action.find("true")) == string::npos) ) { .................................... } Lo so che è un "trucchetto" inelegante, però funziona ![]() |
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Quote:
|
|
![]() |
![]() |
![]() |
#8 | |
Member
Iscritto dal: May 2005
Messaggi: 80
|
Quote:
Con questa osservazione credo tu mi abbia risolto molti problemi, sarà meglio che mi studi meglio i metodi di string |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
raga mi dispiace di aver sollevato un polverone
![]() cmq vi ringrazio moltissimo, anche se alla fine ho risolto facendo direttamente la sqrt()..... era solo un modo per fare prima, in quanto se ho ben capito la velocità computazionale dell'accesso ai vettori è fissa, mentre quello della funzione può variare... alla fine nn mi cambia nulla, quindi.... GRAZIE!!
__________________
ho fatto affari con: na decina di anime ![]() |
![]() |
![]() |
![]() |
#10 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
Quote:
la "tecnica" della look-up table infatti era usata da un vecchio software scritto in C su un 386-25Mhz..... byez
__________________
ho fatto affari con: na decina di anime ![]() |
|
![]() |
![]() |
![]() |
#12 |
Junior Member
Iscritto dal: Feb 2006
Messaggi: 11
|
Salve ragazzi co sto programmino in java che mi visualizza i numeri primi però no riesco a far visualizzare i suoi divisori. Esempio ciò 3 e divisible solo con 3 oppure cio 4 e divisibile con 2 e 4 ecc.
public class NumeriPrimi{ static int primo; static int i; public static String numeroPrimo(int primo){ if(primo==2){ return"è un numero primo"; }else if (primo==3){ return "è un numero primo"; }else if (primo==5){ return "è un numero primo"; } if ((primo%2)==0) { return"non è numero primo"; }else if ((primo%3)==0){ return"non è un numero primo"; }else if ((primo%5)==0){ return"non è un numero primo"; } return"é un numero primo"; } public static void main(String args[]) { //NumeriPrimi primo = new NumeriPrimi(); String risposta=NumeriPrimi.numeroPrimo(3) System.out.println(risposta); } } |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Jan 2003
Città: Castellammare di Stabia (NA)
Messaggi: 2031
|
Quote:
![]()
__________________
ho fatto affari con: na decina di anime ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:15.