Этот вопрос двоякий, частично он касается математики, частично - частичного применения (каламбур).
Есть одно значение, для которого формула дискриминанта становится тривиальной, это когда c
равно нулю.Таким образом, мы можем обеспечить эффективную реализацию для этого,
let discriminant_for_c = function
| 0 -> fun b a _ -> a *. b /. 2.
| n -> general_discriminant
let r b c a = (discriminant_for_c c) b c a
Однако, после второй мысли, я считаю, что это опечатка в упражнении, и это переменная b
, которая исправлена,И действительно, с фиксированной b
у нас есть еще много интересных решений.И пусть это будет для вас как упражнение:)
Кроме того, помимо дидактических целей этого упражнения, имейте в виду, что в реальных приложениях обычно вообще плохая идея вычислить дискриминант, из-за катастрофической отмены , и существует более точный и стабильный алгоритм для вычисления квадратных уравнений.