Rechnen mit pgf, Ergebnis "zu" ungenau

Formelsatz für Mathematik, Naturwissenschaften und Technik


StefanB
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 84
Registriert: Mi 28. Jul 2010, 10:57

Rechnen mit pgf, Ergebnis "zu" ungenau

Beitrag von StefanB »

Hallo,

ich versuche gerade mir mit pgf ein kleines Makro zu schreiben, dass mir einen Notenschlüssel abhängig von max. Punktzahl und gewählten "Prozentschritt" erstellt und das ganze in eine Tabelle schreibt...

Das Problem ist das Runden auf die 0.5.

Aber zunächst stehe ich vor dem Problem, dass pgf "unsauber" rechnet. Ich habe folgendes definiert:
\documentclass{article}
\usepackage{pgf}

\begin{document}

\def\myarraynote{{0.85,0.7,0.55,0.45,0.35,0.3}}
\foreach \i in {0,1,2,3,4,5} 
{ \pgfmathparse{{multiply(20,\myarraynote[\i]}} \pgfmathresult \\}
\end{document}


Die erste Rechnung: 20*0.85=17, also wirklich 17. pgf berechnet aber 17.00012

Wieso?

Oder bin ich da auf einem falschen Weg und könnte das ganze einfacher realieren?

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

TeX rechnet wirklich nicht so genau, weshalb es zu Rundungsfehlern kommen kann. Etwas genauer als pgfmath ist fp:
\documentclass[parskip=full-]{scrartcl} 
\usepackage{pgffor}
\usepackage{pgfmath}
\usepackage{fp}

\begin{document} 

\def\myarraynote{{0.85,0.7,0.55,0.45,0.35,0.3}}

Mit pgfmath:
\foreach \i in {0,...,5} 
  {\\ \pgfmathparse{multiply(20,\myarraynote[\i]} \pgfmathresult} 

\vspace{1cm}
Mit fp:
\foreach [evaluate=\i as \j using {\myarraynote[\i]}] \i in {0,...,5} 
  {\\ \FPeval\resultfp{\j*20} \resultfp}

\end{document}
Gruß
Elke

StefanB
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 84
Registriert: Mi 28. Jul 2010, 10:57

Beitrag von StefanB »

OK, danke. Ich schau mir das mal an.

Wobei ich eh am Überlegen, die Rechnung von ExcelCalc durchführen zu lassen...Ich will eh Daten von Calc nach TeX exportieren, und dann kann ich die Rechenergebnisse auch gleich mitexportieren...

sudo
Forum-Guru
Forum-Guru
Beiträge: 459
Registriert: Mi 3. Okt 2012, 11:32

Beitrag von sudo »

So schlimm ungenau sind die Ergebnisse ja gar nicht, man muss halt nur die Rechengenauigkeit von TeX beachten und entsprechend runden. Das kann man zum Beispiel mit \pgfmathprintnumber:
\documentclass{article} 
\usepackage{pgf} 
\usepackage{pgffor}

\begin{document}
\noindent
\def\myarraynote{{0.85,0.7,0.55,0.45,0.35,0.3}}%
\foreach \i in {0,1,2,3,4,5}{\pgfmathparse{multiply(20,\myarraynote[\i])}\pgfmathprintnumber[precision=3]{\pgfmathresult}\\} 
\end{document}
PS: Ich brauchte noch pgffor um das Beispiel zum laufen zu bringen. Ist das bei euch anders?
Ein vollständiges Minimalbeispiel (VM) zu erzeugen, ist gar nicht schwer und hilft ganz oft, Fehler selber zu finden. Ohne bekommt man selten gute Antworten. Anleitungen findest du z.B. im golatex Wiki auf TeXWelt oder minimalbeipiel.de
Außerdem hilft das Lesen dieser Seite, Fragen richtig zu stellen.

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

sudo hat geschrieben:PS: Ich brauchte noch pgffor um das Beispiel zum laufen zu bringen. Ist das bei euch anders?
Bei mir ist es ebenfalls so, dass pgffor nicht automatisch von pgf geladen wird.

Antworten