15.01.2009, 09:00
Beitrag #1
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Frage zu Binomialkoeffizient
Hallo zusammen,
ich habe hier im Anhang ein (nun) funktionierendes VI, das zum einen die Fakultäten (und daraus den Binomialkoeffizient) mit den LabVIEW-eigenen Funktionen und zum anderen mit einem Progrämmchen meinerseits berechnet.
Meine 3 Whileschleifen funktionieren nur, wenn ich für k und n den Datentyp "Double" verwende. Bei U64 gibt es bei größeren Werten Fehler, auch hier im Bsp. der Lottozahlen (bei kleinen Werten klappt's).
An was liegt das?
Binomialkoeffizient:
Bsp.: für Lottozahlen:
Fakult_t.vi (Größe: 17,62 KB / Downloads: 348)
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
15.01.2009, 09:17
Beitrag #2
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Frage zu Binomialkoeffizient
' schrieb:Meine 3 Whileschleifen funktionieren nur, wenn ich für k und n den Datentyp "Double" verwende. Bei U64 gibt es bei größeren Werten Fehler, auch hier im Bsp. der Lottozahlen (bei kleinen Werten klappt's).
An was liegt das?
Das VI kann ich nicht ankucken. Aber: Sowas liegt immer daran, dass bei Divisionen mit Integer nur Integer herauskommt und dabei Information verloren geht, nämlich der Nachkommaanteil.
Wenn du (n!/k!/(n!-k!)) machst anstelle (n!/(k!*(n!-k!)) kommt bei Integer was anderes heraus. Bei Double sind beide gleich.
Auch (k!*(n!-k!)) für entsprechend große n und k ist bei Integer schlecht. Das Produkt ist größer als MaxInt - was aber nicht zu einem Fehler führt! Hätte das Ergebnis z.B. 65 Bit, wird das 65. einfach ignoriert. (In LV mag das so sein, dass auf MaxInt begrenzt wird).
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
15.01.2009, 09:32
Beitrag #4
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Frage zu Binomialkoeffizient
Danke für die Infos.
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
15.01.2009, 14:46
(Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2009 14:48 von Lucki.)
Beitrag #5
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Frage zu Binomialkoeffizient
' schrieb:Danke für die Infos.
Hier kommt noch etwas nachgekleckert.
Bei Gleitommazahlen hast Du bei hohen Zahlen Rundungsbverluste, die man bei Ganzzahlen nicht hat. Es gibt ja das neue Zahlenformat FIX, damit kannst Du ausreichende Bitlänge vorgeben.
Angenommen, es soll bis 50! = 3.04E64 funktionieren Dann muß die Ganzzahl die Bitlänge von 64/log(2) = 210 haben.
Nimm das Format FIX und stelle die Länge auf 256bit, 0 Kommastellen ein.
Die Binomialkoeffizienten sind immer ganzzahlig, also sollte die Forel ohne Rest dividierbar sein. Für die Division sollte die Funktion "Quotient und Rest" verwendet werden, um nicht in das Gleitkommaformat hineinzugeraten. Hoffentlich kann die Funktion mit so langen Fixformatzahlen richtig umgehen.
Habe selbst kein Erfahrungen mit dem FIX-Format, vielleicht kannst Du mal berichten, ob es funktioniert.
|
|
|
15.01.2009, 14:54
Beitrag #6
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Frage zu Binomialkoeffizient
Danke für den Nachtrag, aber irgendwie komme ich mit den FXP-Zahlen nicht zurecht. Wenn ich da bei n oder k was eintrage, wird es sofort auf 0 zurückgesetzt.
Was mich allerdings wundert, ist dass die in LabVIEW enthaltenen VIs mit den U64-Zahlen zurecht kommen. Evtl. wird da intern in DBL umgewandelt.
Gruß Markus
' schrieb:Hier kommt noch etwas nachgekleckert.
Bei Gleitommazahlen hast Du bei hohen Zahlen Rundungsbverluste, die man bei Ganzzahlen nicht hat. Es gibt ja das neue Zahlenformat FIX, damit kannst Du ausreichende Bitlänge vorgeben.
Angenommen, es soll bis 50! = 3.04E64 funktionieren Dann muß die Ganzzahl die Bitlänge von 64/log(2) = 210 haben.
Nimm das Format FIX und stelle die Länge auf 256bit, 0 Kommastellen ein.
Die Binomialkoeffizienten sind immer ganzzahlig, also sollte die Forel ohne Rest dividierbar sein. Für die Division sollte die Funktion "Quotient und Rest" verwendet werden, um nicht in das Gleitkommaformat hineinzugeraten. Hoffentlich kann die Funktion mit so langen Fixformatzahlen richtig umgehen.
Habe selbst kein Erfahrungen mit dem FIX-Format, vielleicht kannst Du mal berichten, ob es funktioniert.
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
15.01.2009, 15:31
Beitrag #7
|
|
|
15.01.2009, 17:34
(Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2009 17:35 von jg.)
Beitrag #8
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Frage zu Binomialkoeffizient
' schrieb:FIX ist z.B. für kaufmännische Berechnungen. Grundlage dieses Datentyps ist ein I32/I64. In der Anzeige (und der Eingabe) erscheint es so, als sei es eine Double-Zahl mit z.B. vier Nachkommastellen. Dabei wird lediglich die I32/I64-Zahl durch die entsprechende Zehnerpotenz geteilt (=> der Dezimalpunkt um die Anzahl der Nachkommastellen verschoben).
Halt, halt,
hier im Beitrag geistert im Moment so einiges Falsches über das LV-FXP-Format rum.
Schaut mal hier:
http://zone.ni.com/reference/en-XX/help/37...data/#Using_FXP
Somit ist zu bemerken:
1. Eine FXP hat maximal 64bit. (@Lucki: 256 bit geht leider nicht, obwohl es bestimmt interessant wäre).
2. Es wird nicht der Dezimalpunkt verschoben. Es werden immer nur dieselbe Anzahl an Bits für die Nachkommadarstellung genommen. Das bedeutet aber, dass ich nur rationale Brüche, die durch eine Potenz von 2 darstellbar sind (also z.B. 1/2, 1/4, ...) exakt darstellen kann, vorausgesetzt, ich habe genügend Bits für die Nachkommadarstellung reserviert. Bsp: Reserviere ich nur 1 bit für das "Nachkomma", dann kann ich nur Vielfache von 0,5 exakt darstellen.
Dann noch was zum ursprünglichen Thema:
@Y-P: Hast du dir mal die LabVIEW-interne-Implementation des Binominalkoeffizienten angeschaut? Denn alle 3 Fakultäten ausrechnen, da machst du ein wenig zu viel des Guten.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
15.01.2009, 18:17
Beitrag #9
|
IchSelbst
LVF-Guru
Beiträge: 3.697
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Frage zu Binomialkoeffizient
' schrieb:Es werden immer nur dieselbe Anzahl an Bits für die Nachkommadarstellung genommen. Das bedeutet aber, dass ich nur rationale Brüche, die durch eine Potenz von 2 darstellbar sind (also z.B. 1/2, 1/4, ...) exakt darstellen kann, vorausgesetzt, ich habe genügend Bits für die Nachkommadarstellung reserviert. Bsp: Reserviere ich nur 1 bit für das "Nachkomma", dann kann ich nur Vielfache von 0,5 exakt darstellen.
Da muss ich wohl was falsch verstanden haben.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
16.01.2009, 07:08
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Frage zu Binomialkoeffizient
Danke für Info, Jens.
Das habe ich auch gesehen. Ich wollte die Fakultäten einzeln berechnen, da ich das jeweilige Ergebnis als Vergleich zu meinen Werten haben wollte.
Gruß Markus
' schrieb:@Y-P: Hast du dir mal die LabVIEW-interne-Implementation des Binominalkoeffizienten angeschaut? Denn alle 3 Fakultäten ausrechnen, da machst du ein wenig zu viel des Guten.
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
| |