StrD()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

StrD()

Beitrag von STARGÅTE »

Tachchen,

mir ist gerade aufgefallen das StrD() immer nur "Standard" 10 Dezimal Stellen ausgibt. Erst wenn man selber sagt das es mehr sein sollen werden mehr angezeigt.

Sollte man nicht Standardmäßig einstellen das StrD() alle verfügbaren Stellen nimmt ?

Code: Alles auswählen

Debug #PI
Debug StrD(#PI)
Debug StrD(#PI, 16)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

result$ = "Ergebnis: " + StrD(value) ; wir verwenden nicht den 2. Parameter, bekommen deshalb die volle Fließkommazahl
Hilfe und Realität gehen da aber nicht konform!
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm...

> Sollte man nicht Standardmäßig einstellen das StrD() alle verfügbaren Stellen nimmt ?

ist ein wenig widersinnig, oder?

PI ist ein nicht endender, nicht periodischer dezimalbruch.
(was übrigens auf alle irrationalen zahlen zutrifft)

beim übersetzen einer endlichen, base2 gespeicherten zahl in eine base10 darstellung,
kann relativ oft ein nicht-endlicher dezimalbruch heruskommen.
also, wo soll StrD() dann schluss machen..
bei 64KB stringlänge? oder wenn der speicher voll ist?

imho ist eine standard begrenzung auf 10nks durchaus sinnvoll, sollte man halt mal die Help anpassen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

darum gehts ja nicht es geht darum das nicht alle verfügbaren Stellen einer .D angezeigt werden, obwohl sie da sind. muss ja nicht PI sind, ist ja bei alles .D so
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

lies mein posting nochmal....

wenn du eine endliche base2-zahl in eine base10-darstellung konvertierst,
wirst du in den meisten fällen eine unendliche anzahl nachkommastellen bekommen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ließ du noch mal ^^

debug IrgendeineD

gibt mir eine bestimmt zahl aus, und die hat mehr Stellen als StrD warum?

Mir ist ja klar das Fießkommazahlen sehr "flüchtig" sind, trotzden werden sie da als "echte" Zahl gespeichert, und auch ausgegeben, dann kann doch StrD diese auch so anzeigen wie sie ist.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also gut....
mag ja sein, dass die umwandlung, die Debug vornimmt,
aus irgendeinem grund anders ist.

aber:
StrD() muss eine beschränkung haben.
ob nun Debug auf 20nks beschränkt, und StrD auf 10nks,
ist nur eine nötige ergänzung in der Help, beides ist kein Bug.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

jo beschränkung ja, und in BUG ist es ja auch nicht, aber ich woltle nur wissen wie man halt das "so kurz" gemacht hat
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Wie man im folgenden Code sieht, hat 'Debug d.d' auch eine Begrenzung.

Code: Alles auswählen

Define d.d = 1

For a = 1 To 30
  d / 2
Next

Debug d
Debug StrD(d, 40)
Debugger hat geschrieben:0.0000000009313225746154785
0.0000000009313225746154785156250000000000
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

STARGÅTE hat geschrieben:jo beschränkung ja, und in BUG ist es ja auch nicht, aber ich woltle nur wissen wie man halt das "so kurz" gemacht hat
Du meinst, warum?
Debug wird nur zur Fehlersuche verwendet, demnach ist es garnicht so
verkehrt, ein möglichst genaue Zahl zu erhalten ... StrD wird hingegen
normalerweise benutzt, damit man eine ziemlich genaue Zahl dem
Benutzter visualisieren kann, aber dieser wird im normalfall mit 20 - 40
Nachkommastellen etwas überfordert sein. Aber am ende ist die Frage je
unwichtig, weil StrD dafür den optionalen Parameter hat ... und somit
diese Standart-Frage jeglichen relevants entzieht.

Und für wirklich sehr kleine Zahlen empfiehlt sich eh eine andere
Darstellung ... wer kann schon so ohne weiters sagen, ob das nun 10
oder 20 Nullen nach dem Komma sind :wink:

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten