Cómo convertir float a entero en prolog?convertir float a entero en prolog
me trataron:
?- integer(truncate(sqrt(9))).
false.
?- integer(round(sqrt(9))).
false.
Cómo convertir float a entero en prolog?convertir float a entero en prolog
me trataron:
?- integer(truncate(sqrt(9))).
false.
?- integer(round(sqrt(9))).
false.
El predicado integer/1
que utilizó es cierto si y sólo si su argumento es un entero. Dado que el término truncate(sqrt(9))
es no un número entero, el predicado hace no espera y por lo tanto falla para este plazo.
Hay al menos dos maneras de conseguir lo que quiere:
Usted puede utilizar el predicado (is)/2
para la conversión entre diferentes representaciones numéricas. En particular, consulte aritmética funcionesround
, truncate
y ceiling
. Por ejemplo:
?- X is round(sqrt(9)). X = 3.
Sin embargo, tenga en cuenta que el uso de números de punto flotante es siempre muy problemático . Por ejemplo:
?- X is sqrt(2^10000). ERROR: is/2: Arithmetic: evaluation error: `float_overflow'
También hay otros problemas, como errores de redondeo y posible subdesbordamiento.
Debido a las limitaciones inherentes de los números de punto flotante, recomiendo encarecidamente que use mecanismos más generales lugar. Por ejemplo, varios sistemas Prolog admiten números racionales y números enteros con precisión ilimitada, mientras que los flotantes siempre están limitados a la precisión de la máquina.
Si necesita número entero raíces cuadradas, utiliza por ejemplo restricciones del dominio finitos. Con limitaciones, basta con señalar lo sostiene un entero X
que denota el positivo cuadrada raíz:
?- X*X #= 9, X #>= 0. X = 3.
Este también obras para números enteros mayores:
?- X*X #= 2^10000, X #>= 0. X = 1412467032...(1496 digits omitted)
Ver clpfd de más información.