Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-06-2008, 14:35   #1
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
[C++] assurdità

qualcuno mi saprebbe spiegare per quale assurdo motivo lo standard del C++ non ammette i tipi a virgola mobile come template parameters?

è una cosa completamente senza senso, del tutto immotivata: si tratta di una feature implementabilissima, tant'è che la Microsoft per aderire allo standard l'ha dovuta togliere da Visual C++ .NET, creando tra l'altro un breaking change.

Strùtrup è un c******e -.-'
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 14:39   #2
marko.fatto
Senior Member
 
L'Avatar di marko.fatto
 
Iscritto dal: Jul 2007
Messaggi: 499
fìììco
__________________
marko.fatto è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 14:49   #3
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112

W il C++

__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 14:50   #4
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da marko.fatto Guarda i messaggi
fìììco
OT
ma non ti conveniva usare la tavolozza di colori ottimizzata piuttosto che il dithering nell'avatar?
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 14:55   #5
marko.fatto
Senior Member
 
L'Avatar di marko.fatto
 
Iscritto dal: Jul 2007
Messaggi: 499
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
OT
ma non ti conveniva usare la tavolozza di colori ottimizzata piuttosto che il dithering nell'avatar?
mi sforava sempre nel peso
__________________
marko.fatto è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 14:57   #6
marko.fatto
Senior Member
 
L'Avatar di marko.fatto
 
Iscritto dal: Jul 2007
Messaggi: 499
scusate ma nell'esempio che c'è qui
questo pezzo:
Codice:
 // allocate memory:
  buffer = new char [length];
non dovrebbe essere:
Codice:
 // allocate memory:
  buffer = new char [length+1];
per mettere anche il carattere di terminazione?
__________________
marko.fatto è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 16:10   #7
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da marko.fatto Guarda i messaggi
non dovrebbe essere:
Codice:
 // allocate memory:
  buffer = new char [length+1];
per mettere anche il carattere di terminazione?
No:
Codice:
cout.write (buffer,length);
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2008, 22:27   #8
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da 71104 Guarda i messaggi
qualcuno mi saprebbe spiegare per quale assurdo motivo lo standard del C++ non ammette i tipi a virgola mobile come template parameters?

è una cosa completamente senza senso, del tutto immotivata: si tratta di una feature implementabilissima, tant'è che la Microsoft per aderire allo standard l'ha dovuta togliere da Visual C++ .NET, creando tra l'altro un breaking change.
Suppongo sia dovuto al fatto che trattare in modo preciso con i floating point e' molto difficile, per cui c'e' il rischio concreto che cambiando anche solo i flag di compilazione vengano generati istanze di template diverse (immagina di fare delle operazioni con le SSE (64bit di precisione) invece che con la FPU (80)) e con rischi di bug subdoli.
Per inciso non mi viene in mente un esempio pratico di utilizzo di floating point come parametri template. Qualche idea ?
__________________
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 20-06-2008, 12:41   #9
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Una lista/stack/coda/lista doppiamente concatenata/ecc. di float?
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2008, 13:28   #10
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Suppongo sia dovuto al fatto che trattare in modo preciso con i floating point e' molto difficile, per cui c'e' il rischio concreto che cambiando anche solo i flag di compilazione vengano generati istanze di template diverse (immagina di fare delle operazioni con le SSE (64bit di precisione) invece che con la FPU (80)) e con rischi di bug subdoli.
uhm, effettivamente questo ha senso...


Quote:
Per inciso non mi viene in mente un esempio pratico di utilizzo di floating point come parametri template. Qualche idea ?
quello che stavo cercando di fare io, ovvero una classe che rappresenta una generica costante matematica, come pi greco o la e. anziché fare una classe per ogni costante volevo fare un'unica classe templatizzata più una typedef per ogni costante: ciascuna typedef veniva definita al template con la rispettiva costante come argomento.

senza poter passare i numeri a virgola mobile come template parameters invece devo fare una classe base che contiene un campo double che è il valore della costante, e poi N classi derivate ciascuna delle quali chiama il costruttore protetto nella classe base passandogli la rispettiva costante. inoltre le N classi derivate hanno anche qualche altra specializzazione, per esempio ciascuna di esse ritorna il nome della costante ("pi", "e", ecc.).


Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Una lista/stack/coda/lista doppiamente concatenata/ecc. di float?
non c'entra, in quel caso non passi un tipo float, passi un typename cioè il nome di un tipo; che può anche essere float. in altre parole non è questo che è vietato in C++:
Codice:
list<float> ListOfFloatNumbers;
bensì questo:
Codice:
template<float _Value>
class Constant
{
public:
	// ...

};

...

Constant<M_PI> PI;
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2008, 13:33   #11
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da 71104 Guarda i messaggi
quello che stavo cercando di fare io, ovvero una classe che rappresenta una generica costante matematica, come pi greco o la e.
Uhm, non è sufficiente descriverla come const float? Fare un template apposito cosa ti farebbe guadagnare?
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2008, 13:48   #12
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Suppongo sia dovuto al fatto che trattare in modo preciso con i floating point e' molto difficile, per cui c'e' il rischio concreto che cambiando anche solo i flag di compilazione vengano generati istanze di template diverse (immagina di fare delle operazioni con le SSE (64bit di precisione) invece che con la FPU (80)) e con rischi di bug subdoli.
Bè non credo, la precisione è un conto (e dipende dal processore), ma la dimensione è fissa per un dato compilatore. 64bit è double, 80 è long double, sulle nostre macchine.

Non capisco neanch'io questo limite però...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2008, 14:39   #13
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Uhm, non è sufficiente descriverla come const float? Fare un template apposito cosa ti farebbe guadagnare?
non l'ho descritta come const float perché si trattava di un programma per risolvere derivate e semplificare espressioni (se guardi un certo thread di qualche giorno fa capirai ), e quindi la costante deve costituire un tipo di espressione rappresentata come classe che risponda ad una certa interfaccia; nello specifico doveva avere un metodo Derive che calcola la derivata (cioè 0) e un metodo Simplify che resituisce this, più un po' di altra roba.

ne volevo fare un template perché così non dovevo scrivere una classe per ogni costante matematica usata.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2008, 14:44   #14
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
Non capisco neanch'io questo limite però...
io ho interpretato il discorso di marco.r in questa maniera; metti che uno scrive una cosa del genere:

Codice:
template<float _Value>
class Floated
{
	// ...
};

Floated<1> First;
Floated<1.0> Second;
Floated<2-1> Third;
...
non lo so mica se il compilatore genera sempre la stessa definizione... e in effetti non è comunque una buona abitudine per lo stesso motivo per il quale i confronti tra numeri a virgola mobile vanno evitati o fatti con un delta.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2008, 14:44   #15
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Ah ok, non avevo capito quale fosse il tuo scopo. Be', in questo caso mi sembra più che giusto. Non avendo la possibilità di usare template, puoi pensare di salvare separatamente queste costanti? Così poi le tratti nei casi particolari quando derivi la formula o la semplifichi.

__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2008, 14:53   #16
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Ah ok, non avevo capito quale fosse il tuo scopo. Be', in questo caso mi sembra più che giusto. Non avendo la possibilità di usare template, puoi pensare di salvare separatamente queste costanti? Così poi le tratti nei casi particolari quando derivi la formula o la semplifichi.

alla fine ho fatto una cosa del genere:

Codice:
class Expression
{
public:
	virtual operator string () const = 0;
	virtual Expression *Derive() = 0;
	virtual Expression *Simplify() = 0;

};

class Constant : public Expression
{
public:
	Expression *Derive();
	Expression *Simplify();

};

class PI : public Constant
{
public:
	operator string () const;

};

class E : public Constant
{
public:
	operator string () const;

};
Codice:
Expression *Constant::Derive()
{
	// ritorna un'espressione che vale costantemente 0
}

Expression *Constant::Simplify()
{
	return this;
}

PI::operator string () const
{
	return "pi";
}

E::operator string () const
{
	return "e";
}
(non è proprio questo il codice, semplifico)

mentre invece avrei voluto fare:

Codice:
template<double _Value, const char *_Name>
class Constant : public Expression
{
public:
	operator string () const
	{
		return _Name;
	}

	Expression *Derive()
	{
		// ritorna un'espressione che vale costantemente 0
	}

	Expression *Simplify()
	{
		return this;
	}

};

typedef Constant<M_PI, "pi"> PI;
typedef Constant<M_E, "e"> E;
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2008, 14:55   #17
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da 71104 Guarda i messaggi
io ho interpretato il discorso di marco.r in questa maniera; metti che uno scrive una cosa del genere:

Codice:
template<float _Value>
class Floated
{
	// ...
};

Floated<1> First;
Floated<1.0> Second;
Floated<2-1> Third;
...
non lo so mica se il compilatore genera sempre la stessa definizione... e in effetti non è comunque una buona abitudine per lo stesso motivo per il quale i confronti tra numeri a virgola mobile vanno evitati o fatti con un delta.
No continuo a non vedere perché un float qui possa dare problemi.

Allora anche questo non va bene:
Codice:
template<char _param>
class MrX [...]
in quanto può generare cose diverse a seconda dell'architettura e (sotto il gcc almeno) dei parametri di compilazione.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2008, 14:58   #18
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
No continuo a non vedere perché un float qui possa dare problemi.

Allora anche questo non va bene:
Codice:
template<char _param>
class MrX [...]
in quanto può generare cose diverse a seconda dell'architettura e (sotto il gcc almeno) dei parametri di compilazione.
che generi cose diverse a seconda dell'architettura va benissimo: chi se ne frega
mai sentito parlare di ABI mismatch?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2008, 14:59   #19
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da 71104 Guarda i messaggi
alla fine ho fatto una cosa del genere: [...]
Ottima soluzione, in effetti... dovrei esercitarmi di più con la OOP...

Certo era più comodo (ed "elegante") con un template, ma finché funziona...
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2008, 15:06   #20
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da 71104 Guarda i messaggi
che generi cose diverse a seconda dell'architettura va benissimo: chi se ne frega
Eh peccato che puoi decidere con un flag di compilazione se char debba essere signed o unsigned...e una volta mi è servito...
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
Nutanix accelera la migrazione da VMware...
Nutanix apre ai neocloud: piattaforma mu...
Nutanix amplia la piattaforma cloud e st...
Le fotografie dell'eclissi solare e dell...
Oracle AI Database si potenzia con nuove...
Russia offline: blackout internet mobile...
Gemini, Google investe 30 milioni per la...
Roborock Qrevo Edge S5A: 17.000 Pa, acqu...
Resa pubblica la foto della ''Terra che ...
Il robot che ha piegato 200 scatole di f...
SteelSeries Aerox 3 Wireless Gen 2: nuov...
"Quasi sociopatico": Sam Altma...
Star Wars Eclipse in difficoltà: ...
Gestione del team e romance organiche: l...
Intel lancia Core Ultra X9 378H: hardwar...
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: 00:16.


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