Portál AbcLinuxu, 11. května 2025 10:24
U teto matematicke operace stranaB = sqrt(pow(stranaC,2) - pow(stranaA,2)); obcas vyjde, ze vysledek je -nan nebo nan. To znamena, ze je to matematicky nemozny, nebo tk neco.
Nevite, jak si overit, jestli vysledek je nebo neni -nan || nan? Nejak takhle?
if((stranaB = sqrt(pow(stranaC,2) - pow(stranaA,2)) == -nan || (stranaB = sqrt(pow(stranaC,2) - pow(stranaA,2)) == nan){}
nebo jak?
predem diky za pomoc
Začal bych zde http://www.mathworks.com/help/matlab/ref/nan.html a ošetřil proěnné podle tyu operace.
Např. kontroloval zda nedělím nulou, nedělám odmocninu ze záporného čísla apod. Poté výsledek +-NaN nemohu získat
sqrt(fmax(stranaC*stranaC - stranaA*stranaA, 0.0))(superpomalou funkci pow() na vynásobení dvou čísel používá jen prase).
sqrt
má záporný argument, což je když A>C
. A to je správně i z pohledu trojúhelníků, protože pravoúhlý trojúhelník neuděláš, když jedna odvěsna bude delší než přepona. Takže posoudit ifem na C>A a jen v tom případě vzorec počítat.
xxx = pow(stranaC,2) - pow(stranaA,2);
if xxx>0
...stranaB = sqrt(xxx);
else
...///něco je špatně, když vychází pod odmocnítkem záporné
číslo
...// případně stranaB = j*sqrt(-xxx) pokud to má smysl - u délek stran asi - imaginární délka neexistuje
end
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.