There is only very limited support for fraction detection and so on in pgf, and as soon as square roots are involved I think you do need to do some of the things by hand. (To be fair, computer algebra systems are also not great at detecting such expressions, but if you use those to parse the expressions then you can get exact result. Yet LaTeX is not such a computer algebra system.) You can use the keys
\pgfkeys{/pgf/number format/.cd,frac, frac denom=3,frac whole=false}
to obtain
\documentclass[border = 1mm]{standalone}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usetikzlibrary{intersections,calc,backgrounds,fpu}
\newcommand{\PgfmathsetmacroFPU}[2]{\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\pgfmathsetmacro{#1}{#2}%
\pgfmathsmuggle#1\endgroup}
\begin{document}
\tdplotsetmaincoords{70}{80}
\begin{tikzpicture}[tdplot_main_coords,line join = round, line cap = round]
\pgfmathsetmacro{\a}{5}
\pgfmathsetmacro{\b}{7}
\pgfmathsetmacro{\c}{8}
\PgfmathsetmacroFPU{\myr}{{sqrt(-
pow(\a,2) *pow(\b,2)* pow(\c,2)/ (pow(\a,4) + pow(\b,4) + pow(\c,4)- 2
*pow(\a,2) *pow(\b,2) - 2*pow(\c,2) *pow(\b,2)-2*pow(\c,2) *pow(\a,2) ))}}
\coordinate (A) at (0,0,0);
\coordinate (B) at (\c,0,0);
\coordinate (C) at ({(pow(\b,2) + pow(\c,2) - pow(\a,2))/(2*\c)},{sqrt((\a+\b-\c) *(\a-\b+\c) *(-\a+\b+\c)* (\a+\b+\c))/(2*\c)},0);
\coordinate (T) at (\c/2, {\c* (\a*\a + \b*\b - \c*\c)/(2*sqrt((\a+\b-\c) *(\a-\b+\c)* (-\a+\b+\c)* (\a+\b+\c)))},0);
\foreach \point/\position in {A/left,B/below,C/right,T/below}
{
\fill (\point) circle (1.8pt);
\node[\position=3pt] at (\point) {$\point$};
}
\begin{scope}[canvas is xy plane at z=0]
\draw[thick] (T) circle (\myr);
\end{scope}
\draw (T) -- (C) node[midway,sloped,fill=white] {%
\pgfmathparse{\myr/sqrt(3)}%
\pgfkeys{/pgf/number format/.cd,frac, frac denom=3,frac whole=false}%
$\pgfmathprintnumber{\pgfmathresult}\cdot\sqrt{3}\,$cm};
\end{tikzpicture}
\end{document}

Of course, one can do better than that but to the best of my knowledge the routines for doing the required integer arithmetic are not yet implemented in pgf
(and there is a slight chance that there is no real package for those). The main obstacle is that gcd
, which is very useful to cancel common factors in fractions, does not yet work with fpu
. On the other hand, you need fpu
here because the numbers are so large. So I added variant of gcd
(called gcdFPU
) and a number of other routines such as integerpower
which allows one to determine the power of a factor in an integer. For instance, integerpower(12,2)
yields 2
since 12=2^2 times something that is not divisible by 2
. This can be used to pull squares out of the square root.
\documentclass[tikz,border=1mm]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{fpu}
\newcounter{ifactor}
\newcommand{\PgfmathsetmacroFPU}[2]{\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\pgfmathsetmacro{#1}{#2}%
\pgfmathsmuggle#1\endgroup}
\newcommand{\PgfmathtruncatemacroFPU}[2]{\begingroup%
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
\pgfmathtruncatemacro{#1}{round(#2)}%
\pgfmathsmuggle#1\endgroup}
% the following functions are based on
% * https://tex.stackexchange.com/a/177109 (digitcount,digitsum,lastdigit)
% * https://tex.stackexchange.com/a/501895 (memberQ)
% or new in the sense that they were developed on the basis of the existing
% pgf functions
\makeatletter
\newcount\c@Digits
\newcount\c@Powers
\pgfmathdeclarefunction{digitcount}{1}{%
\begingroup%
\global\c@Digits=0
\expandafter\DigitCount@i#1\@nil%
\pgfmathparse{int(\the\c@Digits)}%
\pgfmathsmuggle\pgfmathresult\endgroup}
% \def\GroupDigits#1{%
% \global\c@Digits=0
% \expandafter\DigitCount@i#1\@nil%
% \pgfmathparse{int(\the\c@Digits)}}
\def\DigitCount@i#1#2\@nil{%
\advance\c@Digits by \@ne
\ifx\relax#2\relax\else\DigitCount@i#2\@nil\fi
}
\pgfmathdeclarefunction{digitsum}{1}{%
\begingroup%
\global\c@Digits=0
\expandafter\DigitSum@i#1\@nil%
\pgfmathparse{int(\the\c@Digits)}%
\pgfmathsmuggle\pgfmathresult\endgroup}
% \def\DigitSum#1{%
% \global\c@Digits=0
% \expandafter\DigitSum@i#1\@nil%
% \pgfmathparse{int(\the\c@Digits)}}
\def\DigitSum@i#1#2\@nil{%
\advance\c@Digits by #1
\ifx\relax#2\relax\else\DigitSum@i#2\@nil\fi
}
\pgfmathdeclarefunction{lastdigit}{1}{%
\begingroup%
\global\c@Digits=0
\expandafter\LastDigit@i#1\@nil%
\pgfmathparse{int(\the\c@Digits)}%
\pgfmathsmuggle\pgfmathresult\endgroup}
% \def\LastDigit#1{%
% \global\c@Digits=0
% \expandafter\LastDigit@i#1\@nil%
% \pgfmathparse{int(\the\c@Digits)}}
\def\LastDigit@i#1#2\@nil{%
\c@Digits=#1
\ifx\relax#2\relax\else\LastDigit@i#2\@nil\fi
}
\pgfmathdeclarefunction{integerpower}{2}{%
\begingroup%
\global\c@Powers=0%
\pgfmathtruncatemacro{\pgfutil@tmpa}{#1}%
\loop\pgfmathtruncatemacro{\itest}{gcd(\pgfutil@tmpa,#2)}%0
\ifnum\itest>1\relax%
\advance\c@Powers by \@ne%
\pgfmathtruncatemacro{\pgfutil@tmpa}{\pgfutil@tmpa/#2}%
\repeat%
\pgfmathparse{int(\the\c@Powers)}%
\pgfmathsmuggle\pgfmathresult\endgroup}
\pgfmathdeclarefunction{integerpower2}{1}{% works with large numbers
\begingroup%
\pgfkeys{/pgf/fpu=false}%
\global\c@Powers=0%
\PgfmathtruncatemacroFPU{\pgfutil@tmpa}{#1}%
\loop%
\pgfmathtruncatemacro{\pgfutil@tmpb}{lastdigit(\pgfutil@tmpa)}%
\pgfmathtruncatemacro{\itest}{iseven(\pgfutil@tmpb)}%
\ifnum\itest=1%
\advance\c@Powers by \@ne%
\PgfmathtruncatemacroFPU{\pgfutil@tmpa}{\pgfutil@tmpa/2}%
\repeat%
\pgfmathparse{int(\the\c@Powers)}%
\pgfmathsmuggle\pgfmathresult\endgroup}
\pgfmathdeclarefunction{integerpower3}{1}{% works with large numbers
\begingroup%
\pgfkeys{/pgf/fpu=false}%
\global\c@Powers=0%
\PgfmathtruncatemacroFPU{\pgfutil@tmpa}{#1}%
\loop%
\pgfmathtruncatemacro{\itest}{divby3(\pgfutil@tmpa)}%
\ifnum\itest=1%
\advance\c@Powers by \@ne%
\PgfmathtruncatemacroFPU{\pgfutil@tmpa}{\pgfutil@tmpa/3}%
\repeat%
\pgfmathparse{int(\the\c@Powers)}%
\pgfmathsmuggle\pgfmathresult\endgroup}
\pgfmathdeclarefunction{memberQ}{2}{%
\begingroup%
\edef\pgfutil@tmpb{0}%
\edef\pgfutil@tmpa{#2}%
\expandafter\pgfmath@member@i\pgfutil@firstofone#1\pgfmath@token@stop
\edef\pgfmathresult{\pgfutil@tmpb}%
\pgfmath@smuggleone\pgfmathresult%
\endgroup}
\def\pgfmath@member@i#1{%
\ifx\pgfmath@token@stop#1%
\else
\ifnum#1=\pgfutil@tmpa\relax%
\gdef\pgfutil@tmpb{1}%
\fi%
\expandafter\pgfmath@member@i
\fi}
\pgfmathdeclarefunction{isevenFPU}{1}{%
\begingroup%
\pgfmathparse{iseven(lastdigit(#1))}%
\pgfmathsmuggle\pgfmathresult\endgroup}
\pgfmathdeclarefunction{isoddFPU}{1}{%
\begingroup%
\pgfmathparse{isodd(lastdigit(#1))}%
\pgfmathsmuggle\pgfmathresult\endgroup}
\pgfmathdeclarefunction{divby3}{1}{%
\begingroup%
\pgfmathparse{memberQ({3,6,9},digitsum(digitsum(#1)))}%
\pgfmathsmuggle\pgfmathresult\endgroup}
\pgfmathdeclarefunction{gcdFPU}{2}{%
\begingroup
\pgfkeys{/pgf/fpu=false}%
\pgfmathcontinuelooptrue
\PgfmathtruncatemacroFPU{\pgfutil@tmpa}{#1}%
\PgfmathtruncatemacroFPU{\pgfutil@tmpb}{#2}%
\PgfmathtruncatemacroFPU{\itest}{ifthenelse(\pgfutil@tmpa==0,1,0)}%
\ifnum\itest=1\relax
\pgfmathcontinueloopfalse
\PgfmathtruncatemacroFPU{\pgfutil@tmpa}{\pgfutil@tmpb}%
\fi%
\PgfmathtruncatemacroFPU{\itest}{ifthenelse(\pgfutil@tmpb==0,1,0)}%
\ifnum\itest=1\relax
\pgfmathcontinueloopfalse
\PgfmathtruncatemacroFPU{\pgfutil@tmpb}{\pgfutil@tmpa}%
\fi%
\PgfmathtruncatemacroFPU{\pgfutil@tmpa}{abs(\pgfutil@tmpa)}%
\PgfmathtruncatemacroFPU{\pgfutil@tmpb}{abs(\pgfutil@tmpb)}%
\loop
\ifpgfmathcontinueloop%
\PgfmathtruncatemacroFPU{\itest}{ifthenelse(\pgfutil@tmpa==\pgfutil@tmpb,1,0)}%
\ifnum\itest=1\relax
\pgfmathcontinueloopfalse
\else
\PgfmathtruncatemacroFPU{\itest}{ifthenelse(\pgfutil@tmpa>\pgfutil@tmpb,1,0)}%
\ifnum\itest=1\relax
\PgfmathtruncatemacroFPU{\pgfutil@tmpa}{\pgfutil@tmpa-\pgfutil@tmpb}%
\else
\PgfmathtruncatemacroFPU{\pgfutil@tmpb}{\pgfutil@tmpb-\pgfutil@tmpa}%
\fi
\fi
\repeat
\PgfmathtruncatemacroFPU\pgfmathresult{\pgfutil@tmpa}%
\pgfmathsmuggle\pgfmathresult\endgroup}
\pgfmathdeclarefunction{factorinteger}{1}{%
\begingroup% not yet done
\endgroup
}
\makeatother
\newcommand{\Pgfmathfraction}[3]{\begingroup%
\pgfmathtruncatemacro{\mynumerator}{#2/gcd(#2,#3)}%
\pgfmathtruncatemacro{\mydenominator}{#3/gcd(#2,#3)}%
\pgfmathsmuggle#1\endgroup}
\begin{document}
\tdplotsetmaincoords{70}{80}
\foreach \a/\b/\c in {3/4/5,6/7/8,5/7/8}
{\begin{tikzpicture}[tdplot_main_coords,line join = round, line cap = round,
declare function={numerator(\a,\b,\c)=pow(\a,2) *pow(\b,2)* pow(\c,2);
denominator(\a,\b,\c)=-pow(\a,4) - pow(\b,4) - pow(\c,4)+%
2*pow(\a,2) *pow(\b,2)+2*pow(\c,2) *pow(\b,2)+2*pow(\c,2)*pow(\a,2);}]
\begin{scope}[local bounding box=elli]
\PgfmathtruncatemacroFPU{\mynumerator}{numerator(\a,\b,\c)}
\PgfmathtruncatemacroFPU{\mydenominator}{denominator(\a,\b,\c)}
\PgfmathtruncatemacroFPU{\mygcd}{gcdFPU(\mynumerator,\mydenominator)}
\message{numerator=\mynumerator,denominator=\mydenominator,gcd=\mygcd^^J}
\PgfmathtruncatemacroFPU{\newnumerator}{\mynumerator/\mygcd}
\PgfmathtruncatemacroFPU{\newdenominator}{\mydenominator/\mygcd}
\message{new numerator=\newnumerator,new denominator=\newdenominator^^J}
\pgfmathtruncatemacro{\myprenum}{1}
\pgfmathtruncatemacro{\mypreden}{1}
\foreach \Prime in {2,3,5,7,11,13,17}
{\pgfmathtruncatemacro{\myint}{integerpower(\newnumerator,\Prime)}
\ifnum\myint>1
\pgfmathtruncatemacro{\myint}{2*int(\myint/2)}
\PgfmathtruncatemacroFPU{\newnumerator}{\newnumerator/pow(\Prime,\myint)}
\xdef\newnumerator{\newnumerator}
\pgfmathtruncatemacro{\myprenum}{\myprenum*pow(\Prime,\myint/2)}
\xdef\myprenum{\myprenum}
\fi
\pgfmathtruncatemacro{\myint}{integerpower(\newdenominator,\Prime)}
\ifnum\myint>0
\pgfmathtruncatemacro{\myint}{2*int(\myint/2)}
\PgfmathtruncatemacroFPU{\newdenominator}{\newdenominator/pow(\Prime,\myint)}
\xdef\newdenominator{\newdenominator}
\pgfmathtruncatemacro{\mypreden}{\mypreden*pow(\Prime,\myint/2)}
\xdef\mypreden{\mypreden}
\fi
}
\message{new numerator=\newnumerator, pre num=\myprenum,new
denominator=\newdenominator, pre den=\mypreden^^J}
\pgfmathsetmacro{\myr}{(\myprenum/\mypreden)*sqrt(\newnumerator/\newdenominator)}
\coordinate (A) at (0,0,0);
\coordinate (B) at (\c,0,0);
\coordinate (C) at ({(pow(\b,2) + pow(\c,2) - pow(\a,2))/(2*\c)},{sqrt((\a+\b-\c) *(\a-\b+\c) *(-\a+\b+\c)* (\a+\b+\c))/(2*\c)},0);
\coordinate (T) at (\c/2, {\c* (\a*\a + \b*\b - \c*\c)/(2*sqrt((\a+\b-\c) *(\a-\b+\c)* (-\a+\b+\c)* (\a+\b+\c)))},0);
\foreach \point/\position in {A/left,B/below,C/right,T/below}
{
\fill (\point) circle (1.8pt);
\node[\position=3pt] at (\point) {$\point$};
}
\begin{scope}[canvas is xy plane at z=0]
\draw[thick] (T) circle (\myr);
\end{scope}
\draw (T) -- (C) node[midway,sloped,fill=white] {%
$\displaystyle\ifnum\mypreden=1
\myprenum
\else
\frac{\myprenum}{\mypreden}
\fi
\ifnum\newdenominator=1
\ifnum\newnumerator=1
\else
\cdot\sqrt{\newnumerator}
\fi
\else
\ifnum\newnumerator=1
\cdot\frac{1}{\sqrt{\newdenominator}}
\else
\cdot\sqrt{\frac{\newnumerator}{\newdenominator}}
\fi
\fi\,$cm};
\end{scope}
\node[above] at (elli.north){$a=\a,b=\b,c=\c$};
\end{tikzpicture}}
\end{document}

\draw (T) -- (C) node[midway,sloped,fill=white] {$\pgfmathprintnumber{\myr}$cm};
. – user194703 Aug 16 '19 at 5:03\pgfmathparse{\myr} \xdef\r{\pgfmathresult} $\r{} cm$
– koleygr Aug 16 '19 at 5:234.0414518843273803516
. I want to exactly result. – minhthien_2016 Aug 16 '19 at 5:27\frac{7}{3}\cdot\sqrt{3}
. – minhthien_2016 Aug 16 '19 at 5:31