INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Frage zu Binomialkoeffizient



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

15.01.2009, 09:00
Beitrag #1

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

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:
   


Sonstige .vi  Fakult_t.vi (Größe: 17,62 KB / Downloads: 347)

Lv85_img

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.01.2009, 09:17
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
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).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.01.2009, 09:17
Beitrag #3

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Frage zu Binomialkoeffizient
' schrieb: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:
[attachment=43779:5b1910ee...41ebbf44.png]

Bsp.: für Lottozahlen:
[attachment=43783:6a7bd61d...0908c9d3.png]

[attachment=43782:Fakult_t.vi]
Lv85_img

Gruß Markus

Überleg Dir mal wieviele Digits in eine 64 Bit Integer Zahl passen! Pro 10 Bits ungefähr 3 Digits, also hört es bei ungefähr 19 Digit langen Zahlen ganz auf. Bei Floating Point Zahlen nimmt die Genauigkeit ab aber Zahlen bis irgendwo so um 10^308 können noch representiert werden.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.01.2009, 09:32
Beitrag #4

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

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. Top2

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.01.2009, 14:46 (Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2009 14:48 von Lucki.)
Beitrag #5

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.01.2009, 14:54
Beitrag #6

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

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 !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.01.2009, 15:31
Beitrag #7

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Frage zu Binomialkoeffizient
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).

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.01.2009, 17:34 (Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2009 17:35 von jg.)
Beitrag #8

jg Offline
CLA & CLED
LVF-Team

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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.01.2009, 18:17
Beitrag #9

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.695
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.
Hmm

Da muss ich wohl was falsch verstanden haben.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.01.2009, 07:08
Beitrag #10

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

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 !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: