Rechenoperation

Status
Nicht offen für weitere Antworten.
O

OPH

Gast
Tach...

habe im internet net rechnung gefunden, und wollte mal checken inwiefern ich dass noch beherrsche... das erschreckende war/ist, dass ich es absolut net geschafft habe das zu lösen...
hier die rechnung:

Code:
x = (int)(((long)15f*6L%(float)((char)2)-0x7C7)/Integer.MAX_VALUE+1)- (short)Integer.MAX_VALUE;//+1)*5e2d;

und das x ist, ausgerechnet von java, 1000...
mein lösungsansatz:

* 15f, FLoat, Wert: 15.0
* 6L, Long, Wert 6
* 0x7c7, Hex, Wert 1991
* Integer.Max_VALUE, höchst. Wert den Int annehmen kann, Wert = 2^31 - 1
* 5e2d, Double, Wert = 5* 10^2=500

% is modulo und dann hab ich mal zu rechnen begonnen :)
leider ohne ergebnis, ich bekomm immer irgendetwas falsches raus

rechenweg:
15*6 = 90 mod 2 = 45, 0 Rest
0 - 1991 = -1991/(2^31-1)

hier wäre die zahl schon so klein, dass sie selbst und die anderen werte gegenüber der addition von nochmal 2^31+1 gar net mehr ins gewicht fallen würden...
also wie komm ich auf 1000?

mfg
 

Landei

Top Contributor
Schätze mal, dass da auch einige Überläufe und "Abschneidungen" am Werk sind. Die Rechnung ist einfach krank. Splitte sie am besten in Teile auf, dann siehst du, wo es anders läuft als gedacht. Man muss sowas nicht mit Bleistift und Papier rechnen können müssen...
 
O

OPH.

Gast
hab ich schon aufgesplittet... auch schon auf papier gerechnet ;)
die frage ist, wo z.B. das modulo greift, wo daten weggelassen werden
weiß ich auch net...
 
S

SlaterB

Gast
echt schwer diese Zwischenrechnungen..

Code:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        System.out.println("a: "+((long)15f*6L%(float)((char)2)-0x7C7));
        System.out.println("b: "+(Integer.MAX_VALUE+1));
        System.out.println("c = a/b: "+(-1991/-2147483648));
   
    }
}

->

a: -1991.0
b: -2147483648
c = a/b: 0

> und das x ist, ausgerechnet von java, 1000...

bei mir übrigens 1
 
O

OPH

Gast
ach, ich seh grad ich hab etwas fälschlicherweiße auskommentiert,
so müsst es eigentlich heißen:

Code:
x = (int)(((long)15f*6L%(float)((char)2)-0x7C7)/Integer.MAX_VALUE+1)- (short)Integer.MAX_VALUE+1)*5e2d;

aber trotzdem, ist das "(short)Integer.MAX_VALUE" quasi als 0 zu betrachten? denn short hat ja nur einen wertebereich von 2^16, und so geht sich die rechnung dann eigentlich auf auf...
 
S

SlaterB

Gast
> aber trotzdem, ist das "(short)Integer.MAX_VALUE" quasi als 0 zu betrachten?

wieso diese Frage, wenn du auch

System.out.println((short)Integer.MAX_VALUE);

programmieren kannst?


die Frage 'warum ist (short)Integer.MAX_VALUE = x [x ist nicht 0]' wäre berechtigt,
aber 'was ist (short)Integer.MAX_VALUE' macht wenig Sinn, wenn du es selber ausprobieren kannst ;)


---
ich habe weiter oben allerdings einen Fehler eingebaut, bei b soll das +1 gar nicht mit rein,
ist schon eine mühsehlige Arbeit aber man kommt doch immer zum Ziel, einfach soweit umformen bis man alle Zwischenschritte sieht,
 
O

OPH

Gast
habs bereits programmiert, kommt aber -1 raus... also völlig nutzlos dieses ergebnis...
naja wie gesagt, wenn ich das 0 setze funktioniert die rechnung so weit
thx
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben