Итак, я отредактировал ваш вопрос, потому что он был нечитабельным, попробуйте отформатировать его так в будущем; -)
Ответ: вот ваша проблема: OCaml - это функциональный язык, поэтому, когда вы пишете float_of_int a
оно не меняется a
(у вас должно было быть предупреждение о том, что это выражение что-то возвращает, но вы его не обрабатываете).Тип float_of_int
равен int -> float
, поэтому вы даете ему целое число, и оно возвращает вам число с плавающей запятой, которое вам нужно сохранить в переменной.
Тогда вам следует написать:
begin
let a = float_of_int a in
let b = float_of_int b in
let c = float_of_int c in
print_float (((-.b)+.sqrt(b*.b-.4.*.a*.c))/.(2.*.a));
print_float (((-.b)-.sqrt(b*.b-.4.*.a*.c))/.(2.*.a))
end;;
Примечание: я не знаю, почему вы не разыгрываете его как число с плавающей точкой во второй ветви, поскольку -b/2a
не обязательно является целым числом
И как другоепримечание: поскольку вы используете b*b - 4*a*c
четыре раза, поместите его в переменную в начале: let delta = b*b - 4*a*c in ...