Pagina 1 di 1

DOMANDA SU TRUE/FALSE

Inviato: 26/10/2014, 11:15
da gameplay_extreme
Stavo pensando un cosa:

se io scrivo
ciao = true o ciao = false
praticamente memorizzo un dato a un solo bit (ovvero true e false possono tranquillamente essere rappresentati da un solo bit)

pero se SUCCESSIVAMENTE scrivo
ciao = 5 o ciao = 7
non ottengo un errore (non ostante occorra cambiare il numero di bit totali per rappresentare il nuovo numero)

le mie domande sono quindi:
1) esistono variabili che variano dinamicamente i bit occupati in base al numero rappresentato ?
2) non è che se in GM scrivo "ciao = true", il dato, per caso, mi occupa molto più di un bit anche se non sarebbe necessario ?

Re: DOMANDA SU TRUE/FALSE

Inviato: 26/10/2014, 12:49
da Delfador
Se non ricordo male (e se non è cambiato nulla dall'ultima volta che ho usato GM) tutte le variabili sono double, e dunque occupano 64 bit.
In realtà, quando tu scrivi "ciao = true" stai praticamente dicendo "ciao = 1.0".

Re: DOMANDA SU TRUE/FALSE

Inviato: 26/10/2014, 12:57
da aironenero
Siccome GM fa abbastanza schifo a gestire la ram, non puoi creare una variabile di un solo tipo, occupoerai sempre e comunque 64Bit, e devi pure stare attento a non sbagliare.

Re: DOMANDA SU TRUE/FALSE

Inviato: 26/10/2014, 13:45
da Bombertoman
aironenero ha scritto:Siccome GM fa abbastanza schifo
Eccolo qua :lol: perché non apri un topic intitolato "Motivi per abbandonare Game Maker"? Così ti sfoghi una volta per tutte! :lol:

Re: DOMANDA SU TRUE/FALSE

Inviato: 26/10/2014, 15:11
da Nix
gameplay_extreme ha scritto:esistono variabili che variano dinamicamente i bit occupati in base al numero rappresentato?
Non nel GML. Altri linguaggi supportano i numeri a precisione arbitraria (chiamati a volte bignum, bigint, ecc.), ma non c'entrano nulla col tuo esempio. Nel tuo caso vuoi cambiare il tipo di una variabile già esistente, cosa che non ha alcun senso e che è generalmente impossibile. Su GM è apparentemente possibile, ma soltanto perché i booleani sono in realtà double, e dunque non c'è nessun cambiamento reale nel tipo. Inoltre, non è possibile allocare un solo bit.

Re: DOMANDA SU TRUE/FALSE

Inviato: 26/10/2014, 15:13
da Tizzio
In realtà puoi anche scrivere

ciao = "i3r jgi3j igjrj ogijorjgeiorjoi jp4joèo3kp4gp34 gj34jg3j pgoj3p4gjp3j4o gpj3pgjpj diocèwpefwèe caneopkwop kfpowkefkwp porcawopfekpo wemadonnafkw ofkwpoe"

e poi
ciao = true

viene automaticamente fatto il typecasting mica usa lo stesso spazio in memoria

E comunque in altri linguaggi usare un bool occupa comunque 1 byte

Re: DOMANDA SU TRUE/FALSE

Inviato: 26/10/2014, 16:04
da Solid Snake
Tizzio ha scritto:E comunque in altri linguaggi usare un bool occupa comunque 1 byte
E che senso avrebbe? :confuso:

Re: DOMANDA SU TRUE/FALSE

Inviato: 26/10/2014, 16:59
da Jak
Solid Snake ha scritto:E che senso avrebbe? :confuso:
Architettura dei computers, serve ad avere maggiore velocità oltre che per questioni di coerenza del concetto di puntatore e di architettura della memoria. Non sempre ciò che è più veloce a logica lo è fisicamente visto che il computer non va a logica, Per lo stesso motivo esistono anche cose come il padding ed altre che "sprecano" memoria per avere tuttavia una migliore velocità effettiva.
Non è molto differente dalle varie ottimizzazioni in programmazione, quasi sempre non esistono ottimizzazioni a prescindere, puoi solo decidere di sacrificare leggermente una parte per ottenere un grosso vantaggio in un'altra.

Re: DOMANDA SU TRUE/FALSE

Inviato: 29/10/2014, 0:46
da BaronVsCorsar
Naturalmente i linguaggi di programmazione un po' più a basso livello lasciano facilmente utilizzare i singoli bit delle variabili,
quindi lasciano la possibilità di aggregare tante "variabili" binarie nello stesso byte.
gli operatori bitwise (che esistono anche come comandi assembly per questo motivo) sono mantenuti anche in linguaggi di (relativamente) alto livello per gestire bit per bit qualsiasi variabile.

E comunque se la variabile è salvata come integer con un poco di impegno si possono sempre utilizzare i singoli byte, anche se quando non sono disponibili gli operatori bitwise e le variabili integer il gioco potrebbe non valere la candela...

Re: DOMANDA SU TRUE/FALSE

Inviato: 03/05/2015, 9:56
da gameplay_extreme
scusate il "lieve" ritardo,
Se non ricordo male (e se non è cambiato nulla dall'ultima volta che ho usato GM) tutte le variabili sono double, e dunque occupano 64 bit.
ok...quindi DOUBLE = 64 cifre binarie FISSE, se metti come valore 1 vorra dire che ci saranno un sacco di "zeri a sinistra", capito
In realtà, quando tu scrivi "ciao = true" stai praticamente dicendo "ciao = 1.0".
avevo il "vaghissimo" sospetto, però ho preferito chiedere conferma
Non nel GML. Altri linguaggi supportano i numeri a precisione arbitraria (chiamati a volte bignum, bigint, ecc.)
grazie della "seganalazione"
Nel tuo caso vuoi cambiare il tipo di una variabile già esistente, cosa che non ha alcun senso e che è generalmente impossibile.
effetivamente anche a me sembra che non abbia molto senso...comunque Tizzio ha veramente dimostrato (a differenza di me) che in GM si può fare! (testato anche da me, GM8)

Re: DOMANDA SU TRUE/FALSE

Inviato: 01/12/2015, 23:41
da Barnack
So che è un po' da pazzi però nel caso dei bool in c++ che occupano comunque 8 bit potresti essere fantasioso ed agire diversamente, inizializzare un unsigned int, scriverti una formula che scriva e legga un totale di 8 "bool", uno per ogni bit della variabile. È difficile da spiegare, è da pazzi, ma se vuoi ultraiperottimizzare l'utilizzo della ram, si può. Fa anche schifo perché ogni volta che devi verificare uno degli 8 bool contenuti dovresti inserire l'intera formula per ricavarlo. Ah ovviamente ci perdi con l'utilizzo del processore xD
Credo sia invece mooooolto più complesso fare la stesso cosa con un double :\

Re: DOMANDA SU TRUE/FALSE

Inviato: 02/12/2015, 17:58
da Tizzio
gameplay_extreme ha scritto:comunque Tizzio ha veramente dimostrato (a differenza di me) che in GM si può fare! (testato anche da me, GM8)
In realtà il GML è interpretato e quando chiami ciao = true viene riallocato lo spazio (se guardi il source di enigma puoi vedere com'è possibile fare una cosa del genere)
https://github.com/enigma-dev/enigma-de ... m/var4.cpp