Beschouw de kubische vergelijking
$$ax^3+bx^2+cx+d=0$$ in de reële veranderlijke $$x$$ en met reële coëfficiënten. Deze vergelijking heeft steeds een reële oplossing (waarom ?). Cardano vond een methode om in een belangrijk aantal gevallen deze reële oplossing van deze vergelijking te vinden (een veralgemening werd later ontdekt).
Delen we door $$a$$ en substitueren we
$$x=t-\frac{b}{3a}$$ dan komen we een vergelijking van de vorm
$$t^3+pt+q=0$$
met
$$p =\frac{3ac-b^2}{3a^2}$$
$$q =\frac{2b^3-9abc+27a^2d}{27a^3}$$
Indien
$$\frac{q^2}{4}+\frac{p^3}{27}>0$$
kan een reële oplossing $$t_0$$voor $$t$$ gevonden worden uit
$$u^3 = -\frac{q}{2}+\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}$$
$$v^3 = -\frac{q}{2}-\sqrt{\frac{q^2}{4}+\frac{p^3}{27}}$$
$$t_0 = u + v$$
Schrijf een functie $$cardano()$$ met vier reële argumenten, namelijk de coëfficiënten van de kubische vergelijking $$a, b, c. d$$ (in deze volgorde). Indien $$\frac{q^2}{4}+\frac{p^3}{27} > 0$$, dan levert de functie de gezochte reële oplossing. In het ander geval geef je de waarde $$0.0$$ terug.

Argumenten

Vier reële getallen, namelijk de coëfficiënten $$a, b, c, d$$, waarbij $$a$$ verschillend is van 0.

Uitvoer

De reële oplossing van de vergelijking, of 0.0 indien het algoritme geen reële oplossing kan vinden.

Voorbeeld

cardano(1.0, -1, 1, -1) = 1.0
cardano(1, -3, 14, -24) = 2.0
cardano(1, 2, 3, 4) = -1.6506291914393882
cardano(3, 100, 3, -20) = 0.0