Ich möchte eine Fallunterscheidung machen, bei der ich das Ergebnis der sqr-Rechnung auf Ganzzahligkeit untersuchen kann. So soll bei

Open in Online-Editor
\documentclass[11pt, a4paper,twoside]{scrartcl}  
\usepackage{pgf}  
\begin{document}  
\pgfmathparse{sqrt(10)} \pgfmathprintnumberto[precision=1]{\pgfmathresult}{\value}\value  
\end{document}

mir nicht 3,2, sondern wieder \sqrt{10} ausgegeben werden. Wenn es eine ganzzahlige Lösung gibt, soll es ausgerechnet werden.

Open in Online-Editor
\documentclass[11pt, a4paper,twoside]{scrartcl}  
\usepackage{pgf}  
\begin{document}  
\pgfmathparse{sqrt(100)} \pgfmathprintnumberto[precision=1]{\pgfmathresult}{\value}\value  
\end{document}

Kann man das mit einer \ifthenelse untersuchen?

gefragt 08 Jul '15, 00:45

typ42's gravatar image

typ42
38341928
Akzeptiert-Rate: 33%

bearbeitet 08 Jul '15, 08:02

saputello's gravatar image

saputello
11.1k174365


Mir ist jetzt nicht wirklich klar, was Du machen möchtest, aber vielleicht hilft Dir

Open in Online-Editor
\documentclass{scrartcl}  
\usepackage{pgf}
\newcommand\Wurzel[1]{%
  \pgfmathparse{%
    int(sqrt(#1))==sqrt(#1)?int(sqrt(#1)):"\noexpand\ensuremath{\noexpand\sqrt{#1}}"%
  }\pgfmathresult}

\begin{document}
\Wurzel{100} und \Wurzel{10}
\end{document}

alt text

Bitte beachte, dass die Rechengenauigkeit von pgf begrenzt ist.

Permanenter link

beantwortet 08 Jul '15, 01:52

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

alternativ eine Lualösung, die auch bei großen Werten funktioniert:

Open in Online-Editor
\documentclass{scrartcl}  
\usepackage{luacode}
\begin{luacode}
function Wurzel(x)
  local y=math.sqrt(x)
  if y == math.ceil(y) 
    then tex.print(y) else tex.print("\\sqrt{"..x.."}") 
  end
end
\end{luacode}
\newcommand\Wurzel[1]{\ensuremath{\directlua{ Wurzel(#1) }}}

\begin{document}
\Wurzel{100} und \Wurzel{10};
\Wurzel{1000000} und \Wurzel{100000}
\end{document}

alt text

Permanenter link

beantwortet 08 Jul '15, 08:23

Herbert's gravatar image

Herbert
5.1k34
Akzeptiert-Rate: 31%

bearbeitet 08 Jul '15, 08:28

was benutzt man denn am besten, wenn man unter LaTex ein paar Berechnungen durchführen will? Nichts kompliziertes, versteht sich... Ist lua da besser als pgf? Oder lieber calc? oder kann man auch gnuplot zum rechnen benutzen und die Ergebnisse automatisch einbinden lassen?

(08 Jul '15, 14:22) typ42
1

@typ42: "Am besten" hängt immer von den individuellen Anforderungen ab. Sicher dürfte sein, dass Lua genauer rechnet als TeX. Allerdings gibt es auch für TeX Pakete für Berechnungen mit langen Zahlen. pgfplots bietet die Möglichkeit, Graphen zu zeichnen und die Berechnungen dabei von gnuplot erledigen zu lassen. Den einen Weg, den man immer gehen sollte, sehe ich nicht.

(08 Jul '15, 15:20) saputello
1

Berechnungen gehen mit \directlua sehr einfach vonstatten. Im Gegensatz zu dem Paketen pgfmath oder fp. Unabhängig mal von der Genauigkeit, die bei TeX sehr zu wüschen übrif lässt.`

(08 Jul '15, 15:31) Herbert

Ich seh das ein wenig wie @saputello. Wenn ich in einer TikZ Zeichnung eine Koordinate berechnen will, dann reicht mir pgfmath in aller Regel wirklich aus. In Deinem Fall ist der Vorschlag mit \directlua aber eindeutig besser, vorausgesetzt Du kannst mit lualatex kompilieren. Du brauchst nur mal beide Varianten mit \Wurzel{100.0001} testen ;-) Wenn Du Dich für die Antwort von @Herbert entscheiden möchtest, kannst Du bei meiner auch einfach den Haken wieder entfernen und ihn bei dieser Antwort hier setzen.

(08 Jul '15, 22:33) esdd

Eine weitere Möglichkeit mit l3fp, dem floating point-Modul von expl3:

Open in Online-Editor
\documentclass{article}
\usepackage{expl3,xparse}

\ExplSyntaxOn
\cs_new_protected:Npn \typ_wurzel:n #1
  {
    \fp_compare:nNnTF
      { round(sqrt(#1)) } = { sqrt(#1) }
      { \fp_eval:n { sqrt(#1) } }
      { \sqrt{#1} }
  }

\NewDocumentCommand \Wurzel {m} { \ensuremath{\typ_wurzel:n {#1}} }
\ExplSyntaxOff

\begin{document}

\Wurzel{1} \par
\Wurzel{10} \par
\Wurzel{100} \par
\Wurzel{1000} \par
\Wurzel{10000} \par
\Wurzel{100000} \par
\Wurzel{1000000} \par
\Wurzel{1000000.0000001} \par

\end{document}

alt text

Permanenter link

beantwortet 09 Jul '15, 10:05

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 09 Jul '15, 10:17

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×27
×14
×5
×1

gestellte Frage: 08 Jul '15, 00:45

Frage wurde gesehen: 11,117 Mal

zuletzt geändert: 09 Jul '15, 10:17