chriss-330
Goto Top

bitte um help bei Modulu

hallo,

ist es irgendwie möglich eine zahl vom format double % 2 zu nehmen?

weil:

ich hab folgenden code bis jetzt:

if (analogwert >=0)
{
kom0 = analogwert*102.4*16;
}
else
{
kom0 = sqrt(analogwert*analogwert)*102.4*16;
}
kom1 = kom0 / 2;
kom2 = kom1 / 2;
kom3 = kom2 / 2;
kom4 = kom3 / 2;
kom5 = kom4 / 2;
kom6 = kom5 / 2;
kom7 = kom6 / 2;
kom8 = kom7 / 2;
kom9 = kom8 / 2;
kom10= kom9 / 2;
kom11= kom10 / 2;
kom12= kom11 / 2;
kom13= kom12 / 2;
kom14= kom13 / 2;
kom15= kom14 / 2;
abin1= kom0 % 2;
abin2= kom1 % 2;
abin3= kom2 % 2;
abin4= kom3 % 2;
abin5= kom4 % 2;
abin6= kom5 % 2;
abin7= kom6 % 2;
abin8= kom7 % 2;
abin9= kom8 % 2;
abin10= kom9 % 2;
abin11= kom10 % 2;
abin12 = kom11 % 2;
abin13 = kom12 % 2;
abin14 = kom13 % 2;
abin15 = kom14 % 2;

der analogwert wird davor eingelesen und keine eine zahl zwischen -10 und 10 sein, also auch z.b. 8,5 !
Die Zahl die dann nach der Berechnung für kom0 rauskommt, soll dann eben durch die untenstehende berechnung in binär umgewandelt werden. Wenn ich jetzt aber bei analogwert z.b. 8.5 eingebe, dann nimmt er die 8 und rechnet mit der, da ich ja für % eine int zahl brauche.
Aber int kann ja keine 8,5 annehmen.
gibt es da irgendeinen weg das anders zu machen, das ich das irgendwie mit 8,5 auch auf die binärwerte komme ?

danke !

Content-ID: 29806

Url: https://administrator.de/contentid/29806

Ausgedruckt am: 05.11.2024 um 11:11 Uhr

AndreasHoster
AndreasHoster 05.04.2006 um 16:52:27 Uhr
Goto Top
Ich blicke ehrlich gesagt nicht genau, was Du in Deinem Code erreichen willst, aber die Antwort auf die Frage ob man eine Double modulo 2 nehmen kann lautet:

NEIN

Modulo ist definiert für den Rest aus der Division 2er Ganzzahlen. Deswegen will der Compiler ja auch ein Integer haben.

Wenn Du einfach von einer Zahl den Rest der Division durch 2 haben willst:
Zahl durch 2 teilen und in Integer umwandeln (nicht runden). Integer mal 2 nehmen und von der Zahl abziehen. Fertig.
chriss-330
chriss-330 05.04.2006 um 17:17:40 Uhr
Goto Top
ich will erreichen, das ich die zahl die ich nach der berechnung von kom0 rausbekomme (das is dann eine dezimalzahl) in eine binärzahl im prinzip umwandel und dann halt auch die einzelnen 1en und 0en zugreifen kann.

wie meinst du das mit integer umwandeln ( ohne rest)? wie mach ich das ?

integerzahl = doublezahl
einfach so oder ?
AndreasHoster
AndreasHoster 05.04.2006 um 17:44:30 Uhr
Goto Top
Bin mehr Java als C Programmierer, aber wenn integerzahl = doublezahl funktioniert, dann genauso, in Java muß man es casten: integerzahl = (int) doublezahl;

Wenn Du eine Gleitkommazahl in Binär umwandeln willst, Gleitkommazahlen werden als Mantisse und Exponent gespeichert (siehe http://de.wikipedia.org/wiki/Gleitkommazahl#Gleitkommazahlen_in_der_Dig ... ), daß geht dann nicht mehr ganz so einfach.

Kann man in C nicht einfach einen Pointer auf die Variablenadresse machen und die Bits dann direkt auslesen?
miniversum
miniversum 05.04.2006 um 19:00:35 Uhr
Goto Top
ich weiß zwar nicht genau wie du das ergebnis in binär haben willst aber kanst ja versuchen entweder:
Die Zahl mit 10 zu multiplizieren damit du im Bereich 100 bis -100 bist. So hast du dann keine Nachkommastellen mehr.
Dann kannst du auch ohne Probleme nen Cast von Double auf Int machen.

Oder du machst da zwei Variablen. Eine Int für die Stelle vor dem Komma und eine für die Stellen danach und rechnest dann damit.

miniversum
filippg
filippg 05.04.2006 um 19:47:15 Uhr
Goto Top
Ich hasse es, wenn ich es verpeile und dadurch mein mühsam geschriebener Text verlorengeht... daher jetzt nur noch eine Kurzversion: die Modulo-Problematik ist ja schon erläutert. Aber du könntest deinen Code schöner machen, wenn du ein Array verwendest, über das du iterierst.

Filipp