Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Muecke Gast
|
Verfasst am: 06.02.2014, 02:40 Titel: #NV wert in Array Schreiben |
|
|
Hallo miteinander,
ich bin es mal wider mit einer Doofen Frage ich glaube auch das wir so was oder so was in der Art schon mal hatten ich finde es nur nicht ;-(.
ich bin am rechnen von werten die in einem Koordinaten System stecken durch das rechnen hole ich mir bestimmte werte und Marktire die auf dem Monitor
da ich abfragen mehrerer Werte etc mache schreibe ich die zwischen Ergebnisse in Array`s die ich als SINGLE definiert habe.
im Excel in dem ich die ersten versuche der Rechnerrei vorgenommen habe benutze ich den Wert "#NV" wenn ich keinen wert vorliegen habe kann ich so was auch ins Array Schreiben? denn eine 0 ist schlecht denn die kann auch so vorkommen und Negativ werte können auch vorkommen.
ich glaube jedoch das es keinen wert für nicht vorhanden gibt? oder doch?
ich kann das auch nicht mit "" Füllen denn es ist ja kein String.
hat mir jemand eine Idee? was ich machen könnte? |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 06.02.2014, 08:54 Titel: |
|
|
Ein Single kann nur gültige Werte enthalten, ein #NV gibt es hier nicht. Überhaupt kann Excel das nur, weil es standardmäßig den Datentyp Variant benutzt, der sowas zulässt.
Du könntest mit Pointern arbeiten, ein NULL wäre dann eben ein ungültiger Wert, allerdings musst du dann den Speicher für jeden Wert manuell alloziieren und am Ende auch wieder freigeben.
Ein String-Array wäre auch eine Möglichkeit, dann musst du eben zwischen Single und String hin und her wechseln.
Du könntest auch meinen schon etwas betagten Variant-Datentyp nutzen, der hat intern zwar keine Singles, aber Doubles. Dann kannst du im gleichen Array deine nummerischen Werte halten, aber auch einen Leerstring reinsetzen. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.02.2014, 10:21 Titel: |
|
|
MOD hat Folgendes geschrieben: | Ein Single kann nur gültige Werte enthalten |
FreeBASIC wird doch wohl irgendeinen dokumentierten Weg (außer halt direkt passenden IEEE-Werte in die Variable zu schreiben) haben, NaN oder Inf in Floats zu schreiben?! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 06.02.2014, 17:02 Titel: |
|
|
DIM AS SINGLE a = 1/0, b = SQR(-1)
Ob das "legale" Wege sind, weiß ich nicht ... _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Muecke Gast
|
Verfasst am: 14.02.2014, 18:15 Titel: |
|
|
hmm OK, so einfach ist das dann nicht
werde mir das mit dem "Variant-Datentyp" mal genauer anschauen.
@nemored: was du mir damit sagen möchtest ist mir ehrlich gesagt schleierhaft.  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.02.2014, 19:31 Titel: |
|
|
Muecke hat Folgendes geschrieben: | @nemored: was du mir damit sagen möchtest ist mir ehrlich gesagt schleierhaft.  |
Beides wären Anweisungen, die eine ungültige Floating-Point-Zahl generieren würden, was aber auch in die Hose gehen kann, da der Compiler so etwas typischerweise einfach wegoptimieren darf, oder das Programm kann bei der Berechnung abstürzen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1278 Wohnort: Ruhrpott
|
Verfasst am: 14.02.2014, 20:32 Titel: |
|
|
Hallo!
Ich habe nemoreds Vorschläge -aus reiner Neugierde- mal ausprobiert.
"SQR(-1)" liefert als Ergebnis "-1.#IND" und "1/0" ergibt "1#.INF", beides Kennzeichnungen für einen ungültigen Wert.
Kein Kompilerfehler, kein Programmabsturz, man könnte das also auswerten und damit weiterarbeiten, auch wenn die Methode sicher nicht ganz "sauber" ist.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 15.02.2014, 15:39 Titel: |
|
|
1/0 ist ganz schlecht ... sowas wird regulär von der CPU mit einer CPU exception Division By Zero quitiert. Das kann dann (sollte es auch) je nach OS zu einem app-ende führen, da der weitere Programmverlauf nicht mehr konsistent sichergestellt werden kann.
Lege lieber eine art Variant-Datentyp an, in dem du spezifizieren kannst, was du für daten hinterlegst, und ob diese valide sind.
Du könntest z.B. ein Integer oder LongInt nehmen, und darin daten ablegen ... das letzte bit nutzt du dann eifach als konsistenzprüfungsbit.
Code: |
dim t as integer = &B10000000000000000000000000000000 or (10 + 1)
|
Durch das vorherschende "signed" bit, das du von hand spezifizierst kannst du dann zwar nur noch &HFFFFFFFF / 2 Werte speichern ( bei nem int), hast allerdings auch die möglichkeit in einer einzigen variable daten und konsistenzinformationen zu hinterlegen.
LongInt wären dann &HFFFFFFFFFFFFFFFF / 2 möglich
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 15.02.2014, 16:14 Titel: |
|
|
Wäre so etwas nicht auch als UNION denkbar, wo man über INTEGER die Speicherentsprechung eines inf bzw. NaN reinschreibt und es als DOUBLE wieder rausliest? Gut, würde wohl auch über Pointer-Zugriff gehen. +inf, -inf und NaN sind ja in der Gleitkomma-Spezifikation klar festgelegt.
Zitat: | Das kann dann (sollte es auch) je nach OS zu einem app-ende führen |
Hat es bei mir unter verschiedenen Systemen bisher noch nicht getan; aber ich bin ebenfalls davon ausgegangen, dass nicht garantiert ist, dass jedes System dasselbe macht. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|