Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-06-2008, 15: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, 15: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, 15: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, 15: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, 15: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, 15: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, 17: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, 23: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, 13: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, 14: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, 14: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, 14: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, 15: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, 15: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, 15: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, 15: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, 15: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, 15: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, 15: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, 16: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


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
Windows 11 è diventato più...
Apple cambia strategia a causa della cri...
007 First Light: uscita rimandata di due...
Samsung Galaxy A37 e A57: il comparto fo...
DAZN lancia la sua offerta di Natale: My...
Gigabyte fa marcia indietro? Sparito il ...
Alcuni rivenditori giapponesi bloccano l...
Le feste non placano Amazon, anzi: aggio...
Roborock Q10 S5+ a un super prezzo: robo...
Formula sceglie WINDTRE BUSINESS per gar...
EXPO 1.20: AMD migliora il supporto all'...
MacBook Pro con chip M4, 24GB di RAM e 1...
Lefant M330 da 6.000Pa a 139€ o ECOVACS ...
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: 06:59.


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