ValF() ??

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

ValF() ??

Beitrag von The_Dark_Zim-.- »

Hey ho,
eine kurze Frage zu ValF()
Warum wird aus ValF("787878778e-10") = "0.07878787815571",
müsste das nicht eigentlich "0.0787878778" werden?

Gruß Zim
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
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

Re: ValF() ??

Beitrag von NicTheQuick »

Eine altbekannte Frage. Siehe Wikipedia, genauer gesagt hier.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Re: ValF() ??

Beitrag von The_Dark_Zim-.- »

-.- doofe Computer. Aber das muss man umgehen können Oo. Immerhin ist das richtige Ergebniss aus "WolframAlpha" und da sitzt sicher kein Mensch am rechnen ;)
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Kevin
Beiträge: 236
Registriert: 11.06.2007 12:55

Re: ValF() ??

Beitrag von Kevin »

mal ne frage wieso ist das ergebniss von valf genauer als das von vald?

Code: Alles auswählen

Debug  ValF("787878778e-10")
Debug  ValD("787878778e-10")
Debug 0.07878787815571
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Re: ValF() ??

Beitrag von The_Dark_Zim-.- »

Mehr platz für Fehler :D
keine ahnung
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Kevin
Beiträge: 236
Registriert: 11.06.2007 12:55

Re: ValF() ??

Beitrag von Kevin »

sry hab nen fehler gemacht
hab die "" vergessen

so klappts
Debug ValD("787878778e-10")
Debug "0.0787878778"
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Re: ValF() ??

Beitrag von The_Dark_Zim-.- »

Okey "WolframAlpha" rechnet auch nur bei Zahlen unter 17 Ziffern...
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: ValF() ??

Beitrag von STARGÅTE »

WolframAlpha oder besser Mathematica benutzen auch Floats/Doubles nur intern für schnelle Rechnungen.
Bei Sachen die ausgegeben werden, wird eine andere Klasse von Zahlen verwendet, welche Dizimalzahlen auf beliebig genaue Stellen darstellen kann:

WolframAlpha: N[1/7,1000]

Dort kann ich sagen er soll 1/7 wirklich auf 1000 stellen berechnen.

Für ProgrammierinterneSachen ist eine solche genauigkeit *für n Arsch*
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
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: ValF() ??

Beitrag von X360 Andy »

STARGÅTE hat geschrieben:WolframAlpha oder besser Mathematica benutzen auch Floats/Doubles nur intern für schnelle Rechnungen.
Bei Sachen die ausgegeben werden, wird eine andere Klasse von Zahlen verwendet, welche Dizimalzahlen auf beliebig genaue Stellen darstellen kann:
Strings nehme ich an?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: ValF() ??

Beitrag von STARGÅTE »

Nein, zumindest nicht im Speicher.

Mag sein, dass sie die Zahl am ende als String ausgeben lassen.
Jedoch wird die Zahl 1/7 mit 1000 Stellen als anhäufung von Longs/Quads gespeichert ...

zB gibt mit der Speicherverbrauch 472 Bytes zurück. (Statt 1000 noch was, was der String an sich hätte)

Anders Beispiel:

Lasse ich Mathematica 2^8000 errechnen, erhalte ich eine Länge von 1032 Bytes ...
Das lässt darauf schließen, das hier Byte-Arrays oder Long-Array ... benutzt werden:

2^8000 = 4^4000 = 16^2000 = 256^1000

also 1000 Bytes für die 256er und 32Byte als Header oder 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
Antworten