AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hochrechnen

Ein Thema von Pseudemys Nelsoni · begonnen am 2. Sep 2003 · letzter Beitrag vom 3. Sep 2003
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#11

Re: Hochrechnen

  Alt 2. Sep 2003, 21:38
nochmal ne allgemeine frage...
ist:

123*256^3 ... nicht das gleiche wie: 123 * (256*3) ...?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#12

Re: Hochrechnen

  Alt 2. Sep 2003, 21:46
Nein 123*256^3 ...ist nicht das gleiche wie: 123 * (256*3),
sondern das gleiche wie 123 * (256 * 256 * 256)

grüße, daniel
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#13

Re: Hochrechnen

  Alt 2. Sep 2003, 21:47
danke
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#14

Re: Hochrechnen

  Alt 3. Sep 2003, 01:35
Zitat:
a*256^3 + b*256^2 + c*256^1 + d*256^0
Da hier mit Exponenten zur Basis 2 gerechnet wird und ich mal vermute das a,b,c,d nur Bytes sind geht diese Operation viel schneller mit

Delphi-Quellcode:
var
  I: Cardinal;
begin
  I := (A shl 24) + (B shl 16) + (C shl 8) + D;

// bzw.
  I := (A * $1000000) + (B * $10000) + (C * $100) + D;

// bzw.
  I := (A * 256 * 256 * 256) + (B * 256 * 256) + (C * 256) + D;

// $1 = 1 = 256^0 = 2^0
// $100 = 256 = 256^1 = 2^8
// $10000 = 256 * 256 = 256^2 = 2^16
// $1000000 = 256 * 256 * 256 = 256^3 = 2^24

// und X shl Y = X * 2^Y
end;

Power() bzw. IntPower() sind für dieses Problem viel zu mächtige Geschosse

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#15

Re: Hochrechnen

  Alt 3. Sep 2003, 01:40
hallo hagen,

danke das du dir die mühe mit dem code gemacht hast, aber power() sieht für mich einfacher als dein code aus, wobei ich shl und shr nicht genau kenne (ok ich hab hilfe gelesen, aber schlau draus was genau sie bringen wurd ich nicht).
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#16

Re: Hochrechnen

  Alt 3. Sep 2003, 01:58
Power und IntPower sind
1.) viel zu ineffizient
2.) viel zu ungenau !! es können Rundungsfehler entstehen.

SHL und SHR sind ganz einfache Operationen und eigentlich ganz einfach zu verstehen. Sie multipliziren einen Wert mit einem Exponenten zur Basis 2. Damit ist SHL eine spezielle Form der Multiplikation X * Y zur Basis 2. X := Y * 2^e -> X := Y shl e.
SHR ist eine Division X := Y div 2^e --> X := Y shr e.

SHL heist Shift Left.
SHR heist Shift Right.

Alle Zahlen auf unseren Computer sind Binärzahlen also zu Basis 2.
Zb. 10 ist 2^3 + 2^1 = 8 + 2. Binär sehe das so aus

Code:
   
      4    3    2    1    0
     2^4  2^3  2^2  2^1  2^0
      16    8    4    2    1
 
10 =  0    1    0    1    0
Oben siehst du eine Tabelle mit 5 Spalten, jede Spalte representiert den Exponenten zur Basis 2, und darunter habe ich den mal ausgerechnet.
Die unterste Zeile ist unsere 10, bei jeder 1 müssen wir also mit dem darüberstehenden Wert rechnen. Also 10 = 8 + 2 = 2^3 + 2^1.

Ein Links Schift um 1 Bit wäre demnach 20 = 10 shl 1, und ein Rechtsshift um 1 wäre 5 = 10 shr 1
und sehe so aus:

Code:
       4    3    2    1    0
     2^4  2^3  2^2  2^1  2^0
      16    8    4    2    1
 
10 =  0    1    0    1    0
20 =  1    0    1    0    0    = 10 shl 1
 5 =  0    0    1    0    1    = 10 shr 1
Die oberste Zeile zeigt auch die Logische Bitnummer an.

Da SHL/SHR direkte Pascal Bezeichner für Maschinenbefehle sind, sind sie enorm effizient.

Gruß Hagen

PS: bevor einer meint das es noch effizientere Wege als SHL/SHR gibt, ja die gibt es besonders auf moderneren Rechnern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz