División numérica genérica
Como regla general, podemos tomar cualquier valor de cualquier tipo de número, dividirlo por cualquier valor distinto de cero de cualquier tipo de número y obtener un resultado razonable.
212.7 / 6 // Double = 35.449999999999996
77L / 2.1F // Float = 36.666668
La única excepción que he encontrado es que no podemos mezclar unBigInt
con un tipo fraccional (Float
oDouble
)
En el ámbito de los genéricos, sin embargo, existe esta interesante distinción entreIntegral
yFractional
tipos.
// can do this
def divideI[I](a: I, b: I)(implicit ev: Integral[I]) = ev.quot(a,b)
// or this
def divideF[F](a: F, b: F)(implicit ev: Fractional[F]) = ev.div(a,b)
// but not this
def divideN[N](a: N, b: N)(implicit ev: Numeric[N]) = ev.???(a,b)
Mientras yoa.m Curioso por qué es esto, la verdadera pregunta es: ¿hay algún tipo de solución disponible para evitar esta limitación?