![]() |
möchte modulo (Teilen) function neu programmieren
Hallo
Ich wollte die "mod" function nachprogrammieren.. aber irgendwie kommen da falsche Ergebnisse.
Delphi-Quellcode:
function mody(Zahl :longint; Teiler :longint): longint;
var fix3 : longint; runden1 ,runden2, Fix2,Fix1, erst: real; begin erst := Zahl / Teiler; Fix1 := (erst - round(erst)); fix2 := (Fix1 * Teiler); runden1 := fix2 - round(fix2); runden2 := runden1 * 10; If runden2 > 5 Then Fix3 := round(fix2) + 1; If runden2 <= 5 Then Fix3 := round(fix2); result := Fix3; end; ---------- habt Ihr eine Idee woran das liegt? oder gibt es evtl source zu so einer Funktion? [edit=Admin]Code in Delphi-Tags gesetzt. Künftig bitte selber machen. ;-) Mfg, Daniel[/edit] |
Re: möchte modulo (Teilen) function neu programmieren
hi,
aber wozu willst du das rad neu erfinden? in delphi gibt es doch die mod() funktion. und außerdem, nächstes mal bitte die [delphi]-tags benutzen, dann wird dein code schln formatiert und man kann ihn besser lesen Aenogym |
Re: möchte modulo (Teilen) function neu programmieren
Wieso so kompliziert? Den Modulo berechnet man einfacher mit:
Zahl - (Zahl div Teiler) * Teiler |
Re: möchte modulo (Teilen) function neu programmieren
Zitat:
Dazu muss man lediglich wissen, dass im binärsystem ausgehend vom höchstwertigsten bit des dividenten, die zahl der der abzufragenden bits immer weiter erhöhend, auf den wert des divisors überprüft wird, sollte dieser erreicht oder überschritten sein wird er abgezogen und es wird weitergerechnet. das könnte z.B. so aussehen:
Delphi-Quellcode:
und @Aenogym:
procedure _shld(var Dest,Source: Cardinal);
begin Dest := Dest shl 1; Dest := Dest or Byte( (Source and $80000000) > 0 ); Source := Source shl 1; end; function _Mod(Dividend,Divisor: Cardinal): Cardinal; var Count: Byte; begin Result := 0; Count := 32; // 31 bits, also 31 mal schieben repeat _shld(Result,Dividend); // schiebe nächstes bit in result if Result >= Divisor then // s.o., bedingung erfüllt? Result := Result - Divisor; // falls ja, divisor abziehen Dec(Count); until Count = 0; end; klar, wozu das rad neuerfinden, aber wenn man verstehen will was im rechner passiert wenn man (X mod Y) irgendwo hinschreibt isses manchma unabdinglich :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz