mangler datatype: "Signed DBoolean Float"

Tags:    c++

<< < 12 > >>
Ja det lyder mærkeligt, Men jeg har brug for en data type der kan vise værdier fra -1 til +1.

Jeg har gjort en stor insats for selv at finde ud at det.
Jeg har undersøgt typedef, enum, union, struct, etc og forskellige kimpinationer af samme, men det er endnu ikke lykkedes mig at finde noget brugbart.

Jeg kan ikke forestille mig andet end at det er muligt, men hvis der nu skulle være en derude som med sikkerhed kan sige at det ikke kan lade sig gøre, er jeg også meget interesseret, ikke mindst i grunden herfor.


På forhånd tak



12 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Der er ikke nogen standard type der opfører sig sådan.
Men det er forholdsvist simpelt at lave en class der opfører sig sådan.

Skal den kun kunne have værdierne -1 og 1 eller skal den kunne have alle derimellem?
Hvad skal der ske hvis der er overflow?



Alle floats(eller hvad man kalder det) fra -1 til +1 skal den kunne indeholde.
Og faktisk er der også en ekstra feature som jeg har brug for, nemlig at hvis værdien overskrive +1 starter den forfra fra -1 og omvendt.

Jeg sidder og prøver at finde div. toturials og sår'n for at finde ud af det selv, men jeg tror nok snart at jeg giver fortabt...



Man kunne starte med:

Fold kodeboks ind/udKode 




Du har tilsyneladende brugt en del tid på det her og så kan jeg kun baklage at min definition ikke var fuldstændig og at jeg iøvrigt ikke forstår meget at den kode du har skrevet.

Nuvel, de manglende definitioner skal du da have med.

Den kan siges meget kort med -1 == +1, men for at forklare nærmere, betyder dette at hvis værdien skulle overskrive grænsen begynder den forfra fra -1 og omvendt.

fx.
1.1 == -0.9
12.5 == 0.5
13.5 == -0.5
etc.

jeg tager naturligvis et kig mere på koden og prøver at forstå den.

Og så skal jeg da også lige huske at sige tak for hjæpen, det er altid rart når der er en der tager sig tid til at hjælpe.



Du har tilsyneladende brugt en del tid på det her og så kan jeg kun baklage at min definition ikke var fuldstændig og at jeg iøvrigt ikke forstår meget at den kode du har skrevet.

Nuvel, de manglende definitioner skal du da have med.

Den kan siges meget kort med -1 == +1, men for at forklare nærmere, betyder dette at hvis værdien skulle overskrive grænsen begynder den forfra fra -1 og omvendt.

fx.
1.1 == -0.9
12.5 == 0.5
13.5 == -0.5
etc.

jeg tager naturligvis et kig mere på koden og prøver at forstå den.

Og så skal jeg da også lige huske at sige tak for hjæpen, det er altid rart når der er en der tager sig tid til at hjælpe.




Jeg har netop gjort op med mig selv ovennævnte definitioner alligevel ikke er nødvendige.



Jeg har netop gjort op med mig selv ovennævnte definitioner alligevel ikke er nødvendige.



Ideen var at bruge Trunc(...) til at håndtere overflow.

Resten er simple operatorer, der mangle selvfølgelig en del, men de burde være simple at lave.

Koden i main er kun et eksempel på brug.

Spørg hvis der er noget du ikke forstår.



Måske skulle jeg bare fortælle hvad jeg har gang.

Overvej følgende:

Fold kodeboks ind/udKode 


Muligvis kan jeg lokkes til at dele det op.

Uden at definere en ny datatype bliver det umuligt at få proppet 8 floats in på en plads der svarer til 4 byte, evt. 8 hvis jeg deler det op.

Det er sådan landet ligger, jeg har brug for 8 el. 16 bit floats eller en integer data type størrer end 64 bits, men sådan en vil jeg få problemer med senere hen.



Indlæg senest redigeret d. 19.01.2007 03:40 af Bruger #4414
Så vidt jeg kan se vil du gemme 8 float på 32 bit, dvs en float må kun fylde 4 bit? Det giver 16 værdier for et tal.

C og C++ giver ikke mulighed for at arbejde med sådanne størrelser, så du kan ikke gøre det ved at erstatte float med en anden data type i dit eksempel.

Du kan overveje at gøre det med bit-fields, men de er kun til heltal.

Jeg kunne forestille mig at vi lavede noget i stil med:
Fold kodeboks ind/udKode 


Så kan du bruge den med:
Fold kodeboks ind/udKode 


Må jeg spørge om hvad formålet er?



<< < 12 > >>
t