NORMVERT und NORMINV-Funktion bekannt aus der Tabellenkalkulation als Source Code in cpp und für c

NORMVERT und NORMINV-Funktion bekannt aus der Tabellenkalkulation als Source Code in cpp und für c 2017-05-27

No permission to download
Programmiersprache(n)
c, cpp, gcc
Betriebssystem(e)
SUSE Linux tumbleweed, Linux
Hallo Leute!

Wer schon mal die Funktion NORMINV aus der Tabellenkalkulation in c oder cpp verwenden wollte, hier ein
Source-Code den ich im Netz gefunden und an gcc angepasst habe.

Eine gravierende Entdeckung dabei war, das die in gcc verwendete Funktion abs() in diesen Programmbeispiel fehlerhafte Werte produziert. Seit der Installation der neueren Version kann ich abs von gcc wieder verwenden.

Wichtig ist die Funktion Epsilon:
Code:
double Epsilon(void)
{
double floatEps = 1;

    while (1 + floatEps / 2 != 1)
        floatEps /= 2;
return floatEps;
}
Etwas amüsant der Kommentar auf folgender Seite im Netz:
https://stackoverflow.com/questions...ater-than-less-than-less-than-or-equal-to-gre

"I don't know what they were smoking when they wrote that. Double.Epsilon is the smallest representable non-denormal floating point value that isn't 0. All you know is that, if there's a truncation error, it will always be larger than this value. Much larger."

Dazu folgene source:
Code:
public static bool AboutEqual(double x, double y) {
    double epsilon = Math.Max(Math.Abs(x), Math.Abs(y)) * 1E-15;
    return Math.Abs(x - y) <= epsilon;
}
für "normale" c-Programme:
Code:
bool AboutEqual(double x, double y) {
    double epsilon = std::max(abs(x), abs(y)) * 1E-15;
        return abs(x - y) <= epsilon;
}

Durch Verwendung eines Eigenbaus von Epsilon konnte NORMVERT auf gcc portiert werden. Nicht nur mit LibreOffice-Calc, sondern auch mit den Listen einer Schulungsunterlage der DGQ(Deutsche Gesellschaft für Qualität), konnte ich die errechneten Werte dann überprüfen.
NORMINV stellt das Gegenstück zu NORMVERT dar.
Damit kann man den Abstand vom µ bis (Go, bzw. Gu) in sigma berechnen.

Damals bei meiner Umschulung zum Qualitätsfachmann für Längenprüftechnik konnte ich die DGQ-Qualitätsfachkraft sowie den DGQ-Qualitätsassistenten machen.

Quellennachweise und Literaturhinweise:
Hier die wahrscheinlich schon durch neuere Auflagen ersetzten Exemplare:

Herausgeber: Deutsche Gesellschaft für Qualität
Titel: Grundlehrgang Qualitätsmanagement
Block Q/QA
7te Ausgabe 2005
Bezug von: Fachbuchhandlung Dr. Robert Eckert

Herausgeber: Deutsche Gesellschaft für Qualität
Titel: Statistische Methoden zur Produkt- und Prozessüberwachung
Block Q/QA
7te Ausgabe 2003
Bezug von: Fachbuchhandlung Dr. Robert Eckert

Herausgeber: Deutsche Gesellschaft für Qualität
Titel: Prüfmittelmanagement
DGQ-Band 13-61
Bezug von: Fachbuchhandlung Dr. Robert Eckert

Ebenso lesenswert:
Autor: Günter Buttler, Reinhold Stroh
Titel: Einführung in die Statistik
Verlag: rororo
ISBN: 3-499-18740 X

Letzteres wahrscheinlich nur noch über ein Antiquariat zu erwerben. Gegebenenfalls mal in einer Buchhandlung nachfragen. Die Frage übrigens, was öder und trockener ist, statistische Berechnungen bzw. einen Kursus dafür zu besuchen(müssen????) oder die Wüste Gobi, kann ich hier leider nicht beantworten. Das muss jeder für sich selbst tun. Aber um den armen Umschülern und anderen lernenden den Weg durch diese Wüste zu erleichtern, habe ich mich dazu entschlossen, den code hier zu posten.

Der Normalverteilung liegt die gaußsche Glocke zu Grunde. Diese ist eingipflig, symmetrisch und glockenförmig. Der Gipfel der Glocke wird durch den griechischen Buchstaben µ(My) symbolisiert,
der Abstand dazu durch den Buschstaben "x". Der Abstand des Punktes, an dem sich die Kurve vom
konvexen zum konkaven Teil ändert ist 1 sigma.

Beispiel:
Es sollen Teile für die Automobilindustrie mit einer Bohrung von 20H7, also 20.000mm bis 20.21mm Durchmesser gefertigt werden.
Bei einem ideal zentrierten und beherrschten Fertigungsprozess liegt µ, also die Mitte der Kurve bei 20,0105mm, praktisch bei 20,010mm.
Der Großbuchstabe "P" symbolisiert den Fehleranteil einer Grundgesamtheit. Wie hoch ist der Fehleranteil, also der Unterschreitungsanteil und der Überschreitungsanteil?
Aus dem Screenshot der libreOffice-Tabellenkalkulation können wir entnehmen, das der Anteil der guten Teile bei 95.45 Prozent liegt. Unterhalb und oberhalb der Grenzen liegen etwa 2.275 Prozent. Dies kann man jetzt mit dieser Funktion in c und cpp auch berechnen. Das wäre bei einer Größe von sigma gleich 1 der Fall.
In Wahrheit müssen wir daher so produzieren, das sigma wesentlich kleiner als 1 ist.
Um festzustellen, ob eine Fertigung die Langzeitfähigkeit erfüllt, hat man den sogenannten Cpk-Wert.
In unserem Beispiel sehen wir uns mal die Toleranz an, diese beträgt 0,021mm.
Der Wert deltakrit (griechisch delta) ist dabei der kleinste Abstand eines gemessenen Wertes zu einer der beiden Toleranzgrenzen von 20,000mm und 20,021mm.
Cpk = deltakrit/(Standardabweichung(buchstabe s) * 3)
Cpk = deltakrit/(s * 3)

In der Automobilindustrie werden ein Cpk-Wert von 1,67 oder bzw. 2.0 gefordert.
Nehmen wir einmal an, ein Cpk-Wert von 1,67 ist zu erfüllen.

Nehmen wir uns zu dessen Berechnung einmal 50 direkt aufeinander ohne geplante Unterbrechung gefertigte Teile vor:


Hier zunächst unsere Messwerte:
20.01mm, 20.012mm, 20.012mm, 20.012mm, 20.01mm
20.012mm, 20.012mm, 20.012mm, 20.012mm, 20.012mm
20.01mm, 20.011mm, 20.012mm, 20.01mm, 20.011mm,
20.009mm, 20.008mm, 20.01mm, 20.008mm, 20.011mm,
20.01mm, 20.008mm, 20.008mm, 20.011mm, 20.012mm,
20.008mm, 20.008mm, 20.008mm, 20.01mm, 20.009mm,
20.009mm, 20.009mm, 20.01mm, 20.011mm, 20.01mm,
20.012mm, 20.012mm, 20.011mm, 20.012mm, 20.008mm,
20.011mm, 20.009mm, 20.011mm, 20.012mm, 20.011mm,
20.01mm, 20.008mm, 20.009mm, 20.012mm, 20.01mm,

Zunächst ein kleine Analyse:
Max: 20,012mm
Min: 20,008mm
Range: 0,004mm
Mittelwert: 20,0103mm
sigma: 0,001474269102897mm
dkrit: 0,008mm
Cpk:1,80880591028248

Bereits bei einem Cpk-Wert von 1,66666667 haben wir einen ppm(parts per million) von 0,6 fehlerhafte Teile
pro 1 Millionen gefertigte zu erwarten.

nun rechnen wir wie folgt
u = abs(x-µ)/ sigma
u = abs(20.008- 20.0103) / 0.001474269102897
u = 1.56

Da wir für unsere Berechnungen von u in "norminv()" sigma auf 1 setzen erhalten wir für den Wert zwischen den beiden Grenzen -u und u einen Wert von

0,88124011881041400

Das sind etwa 88,12 Prozent aller Teile befinden sich innerhalb dieser Grenzen,
außerhalb sind es 011,8157 Prozent. Also außerhalb von +- 1.56 Sigma:


Das ist von 20.008mm bis ca. 20.0126mm

Lage der Warngrenzen bei:
20,013mm und 20,007mm

Lage der Eingriffsgrenzen bei:
20,014mm und 20,006mm


Noch etwas zu den sogenannten Warn- und Eingriffsgrenzen:
Bei uns in Europa liegen OEG und UEG bei etwa +- 2.58 sigma, also Abstand UEG zu OEG 99 Prozent.
Die Warngrenzen liegen bei 95 Prozent.

Im deutschsprachigen Raum werden 95/99 Prozent, im englischsprachigen Raum 95,44/ 99,97 für EG und WG verwendet.

Hier kommt die Karikatur mit der Brücke ins Spiel. In der Fertigung sollte man Fehler vermeiden anstatt zu korrigieren. Wenn Sie mit einem Fahrzeug über eine Brücke fahren, korrigieren sie den Verlauf der Fahrtrichtung ja auch, bevor das Fahrzeug über die Brücke stürzt oder mit dem Geländer kollidiert.
Sie haben beim Fahren innere Warngrenzen.

Bevor Sie die Fahrbahnbegrenzungen verlassen, korrigieren Sie die Fahrtrichtung. So ähnlich ist es mit der Fertigung. In unserem Beispiel müssten also die Warngrenzen so gesteckt werden, das diese innerhalb der Toleranzgrenzen sind. Bei einen Diagramm, welche die Eingriffs- und Warngrenzen verdeutlichen, sollte der Abstand der Warngrenzen etwa zwei Drittel des Abstandes der Eingriffsgrenzen oder weniger betragen.
Besser vorher eingreifen als warten, bis der Kunde wegen fehlerhaften Teilen abspringt.

Folgende Seiten zur Information:
https://en.wikipedia.org/wiki/Normal_distribution

Auf deutsch:
https://de.wikipedia.org/wiki/Normalverteilung


Viel Spaß
rustyoldguy
Autor
rustyoldguy
Downloads
0
First release
Last update
Bewertung
0,00 Stern(e) 0 Bewertungen
Oben