Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - SEHR große Binärzahl darstellen
theChaoS - So 19.04.09 12:35
Titel: SEHR große Binärzahl darstellen
Hallo alle zusammen ich habe mal wieder ein blödes Problem
ich versuche ein Binärzahl darzustellen die den Extended rahmen soweit sprengt das ab und zu Extended auf die dolle Idee kommt mir Wissenschaftliche Notation auszugeben die natürlich mein System nicht mag ^^
also gibt es da noch irgend etwas
P.S. Uint64 hab ich schon ausprobiert aber da kommt manchmal Schwachsinn raus (z.b. wird die zahl zu 9,435656744676 warum auch immer ;D).
P.S. Kann man Extended dazu bewegen unsinged zu werden ?
Moderiert von
matze: Die Rechtschreibung des Wortes Biner in Binär korrigiert und andere (recht viele) Rechtschreibfehler korrigiert damit der Beitrag lesbar wird.Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am So 19.04.2009 um 13:48
Timosch - So 19.04.09 13:02
1.) Ob die Zahl binär ist, oder nicht, ist doch vollkommen egal. Intern sind alle Zahlen binär
2.) Wieso mag dein System keine wissenschaftliche Notation? Wie meinst du das?
3.) Bitte was? UInt64 ergibt bei dir Kommazahlen? Das ist technisch unmöglich...
4.) Nein, AFAIK gibt es nur Ganzzahlen als unsigned.
5.) Wenn die Zahl ganzzahlig ist, dann such mal hier im Forum nach BigNum2 (so hieß das glaub ich). Das könnte was für dich sein.
6.) Wie groß sind die Zahlen denn?
7.) Kommas und andere Satzzeichen würden es uns erleichtern, deinen Beitrag zu verstehen...
Hidden - So 19.04.09 13:15
Hi :)
Was genau verträgt die Exponentialschreibweise nicht(das System würde ich jetzt auch mal ausschließen :))? Extended ist grundsätzlich so aufgesetzt, dass Größenordnung und Genauigkeit getrennt behandelt werden.
D.h., du hast beispielsweise 1,439 * 10^5. Das entspricht dann 143900, also einer Größenordnung von 5 Dezimalstellen, um die das Komma verschoben werden muss(wie der Exponent der 10 angibt).
Der Vorteil ist ganz einfach, dass damit unvorstellbar große Zahlen um 10^100 = 100..(96 Nullen)..00 noch darstellbar sind, genauso aber unvorstellbar kleine wie 10^-100 = 0,00..(96 Nullen)..001.
Was verwendets du denn zur Zeit zur Ausgabe(hier wird wohl das Problem liegen), FloatToStr()? Welche Berechnugnen führst du denn genau durch, in welchem Bereich sollten die Zahlen also eigentlich liegen?
mfG,
theChaoS - So 19.04.09 15:08
@ Timmosch
1.) Nein ich will ja Binäre Zahlen verabeiten und die dafür geschaffene Proceduren mögen nur 1 sen oder 0 len ^^
2.)Naja wissenschaftliche dotationen mögen die Proceduren auch nicht
3.)Ja ist es. Und ja irgenwie krig ich ne Zahl raus die am ende als kommerzahl angezeigt wird wen ich den Wertebereich weit überschreibe
4.) Schade
5.) Probir ich mal aus.
6.) weis ich vor der verabeitung noch nicht. das maximale was kommen könnte is ca. 1,5 bis 2 Mal so gross wie Extended
7.)Ähhhhhhhhhh ja sorry was ist ein komma ??? ;D
@Hidden
Danke erstmal. Also die Zahl sieht z.b. so aus ' 111111111111111111111111 ' also 24 mal 1. oder 0. und denoch treten ernorme fehelr auf.
Frage: ist es möglich das konvertirungen (strtoint oder strtofloat oder sowas) nunja kürzen oder kommas dazudichten ???
Mitmischer 1703 - So 19.04.09 15:08
Such mal in der Delphi-Hilfe unter FloatToStrF
jaenicke - Mo 20.04.09 05:15
Timosch hat folgendes geschrieben : |
theChaoS hat folgendes geschrieben : |
6.) weis ich vor der verabeitung noch nicht. das maximale was kommen könnte is ca. 1,5 bis 2 Mal so gross wie Extended
|
Extended hat keine Maximalgröße. Die Genauigkeit leidet bloß bei sehr großen Werten. |
Keine stimmt auch nicht, aber eine Eins mit knapp 5000 Nullen (1,1 mal 10^4950 oder so ist die höchste Zahl) wird ja wohl ausreichen...
Was die Genauigkeit angeht, das sind zwischen 10 und 20 Stellen, je nach Größe der Zahl. Bis 2^63-1 kann man auch ganz exakt mit allen Stellen mit Int64 rechnen.
alzaimar - Mo 20.04.09 07:57
theChaoS hat folgendes geschrieben : |
| Also die Zahl sieht z.b. so aus ' 111111111111111111111111 ' also 24 mal 1. oder 0. |
Ist das jetzt die Binärschreibweise, oder ist dir dieser Begriff genauso geläufig wie die Wörter 'Komma', 'Netiquette' und 'Höflichkeit'? :mrgreen:
Bezeichnet deine Zahl mit 24 Einsen also einhundertelf Trilliarden einhundertelf Trillionen einhundertelf Billiarden einhundertelf Billionen einhundertelf Milliarden einhundertelf Millionen einhundertelftausendeinhundertelf oder eher 16777215? Letzteres wäre nämlich das Dezimaläquivalent zu einer Binärzahl, die aus 24 Einsen besteht.
Timosch - Mo 20.04.09 15:02
Nochmals: Zeig mal bitte deinen Code. Irgendwas läuft hier ganz falsch...
theChaoS - Mo 20.04.09 18:34
soo erstmal nochmal THX für die fielen antworten ;D
@alzaimar ist meine Netiquette wirklich so schlecht??? ;D Wen ja soory (mensch bin ich böse nicht mal das internet mag mich ;D)
nunja also ich habe das problem gefunden ^^
mein quelltext (ich nutze Delphi 7 und damit verbunden die Internet Socket Komponente (nicht indy ^^))
Delphi-Quelltext
1: 2: 3: 4: 5:
| for i:=0 to EndeZaeler do begin Clientsocket1.Socket.SendText(GibArray(i)); end; end; |
Sooo nun zu meinen wirklich dummen fehler: es wird bei einem solchen aufruf nicht X mal ein Text geschickt, nein statt dessen werden ALLE texte zusammen abgeschickt !
D.h. es lag nicht am Wertebereich sonderen an der Tatsache das seher viele seher grosse Int64 am ende zusammen in EINE int64 geschrieben werden. Das ist auch der grund warum Extended nicht richtig funktionirt hat.
Also Danke an all die Denkanstösse (troz meiner schlechten fragestellung(was habe ich mir dabei gedacht ?????)) und danke für eure Gedult ;D
Yogu - Mo 20.04.09 18:43
Ich bin mir nicht ganz sicher, aber es kann durchaus sein, dass SendText nur in einen Stream schreibt, dessen Protokoll du selbst verwalten musst. Das heißt konkret: Du brauchst irgend eine Art Steuerzeichen, angebracht wäre sicherlich #10#13, einem normalen Windows-Zeilenumbruch.
Ob der automatisch erkannt wird, hängt von deiner Leseroutine ab, sonst musst du beim Lesen eben immer auf dieses Steuerzeichen prüfen, und die Zahlen aufteilen.
theChaoS - Mo 20.04.09 18:55
@ Narses:
Tja sorry das ich euchb so lange raten lasen habe.
Die warheit ist: Ich wusste selber nicht WO mein problem liegt ;D.
Ich ware mir allerdings sicher das es nicht am Socket liegen könte (wer erwarte den sowas ^^).
Tja dummheit gepart mit Grössenwahn ;D
alzaimar - Mo 20.04.09 19:26
Ahoj, 'theChaoS'
Deine suboptimale Netiquette macht sich durch dein fehlendes Bemühen bemerkbar, die deutsche Rechtschreibung zu beherzigen. Dein Ton ist ok, aber man merkt deinen Beiträgen an, das Du dir nicht sonderlich Mühe beim Korrekturlesen gibst. Diese Mühe erwartest Du aber von Anderen bei der Beantwortung deiner Frage.
Schreib einfach schönes Deutsch, dann meckert keiner.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!