rango El valor mínimo de float en java es positivo ¿por qué?




string to float java (4)

MIN_VALUE le dice qué tan preciso puede obtener un flotador, pero no el mínimo matemático que puede representar. Deberían haberlo nombrado mejor ...

Negativo de MAX_VALUE es el valor mínimo matemático para flotadores (lo mismo ocurre con el doble).

La razón por la que puede suponer que esto tiene que ver con cómo se representan los números en binario:

Java float and double utiliza el bit de signo para representar valores negativos / positivos en lugar de la representación de complemento de dos para enteros. Esto significa que su valor positivo y negativo tienen la misma magnitud, es decir. - (máx. positivo) = máx. negativo Por lo tanto, no es necesario que defina una constante matemática real real para flotadores, ya que solo puede usar la constante máxima positiva para determinar cuál es el límite negativo. Para los enteros, necesita 2 constantes diferentes que definen max / min debido a la forma en que se representan en binario, es decir, -max! = Min.

Para obtener más información, http://people.uncw.edu/tompkinsj/133/numbers/Reals.htm

Esta pregunta ya tiene una respuesta aquí:

cuando usamos la función MIN_VALUE en cualquiera de los tipos primitivos en java, nos da el valor mínimo posible para ese tipo. PERO, en caso de flotación y doble, devolvió un valor mínimo positivo, aunque la flotación y el doble también pueden tener valores negativos.


El valor mínimo de float en java es positivo ¿por qué?

El motivo por el que eligieron el nombre de las constantes no tiene respuesta (por nosotros) porque nadie en SO estaba en la sala cuando se tomó la decisión.

Además, saber la respuesta a la pregunta no va a ayudar, porque los valores de Float.MIN_VALUE y Double.MIN_VALUE no se cambiarán, no importa cuán "incorrectos" puedan ser. (Rompería cualquier código existente que use estas constantes, y los diseñadores de Java solo lo hacen cuando no hay otra alternativa viable. Dejarlo solo es claramente una alternativa viable).

Supongo que la respuesta (es decir, la razón real de la decisión) podría ser relevante para las personas que desarrollan nuevos lenguajes de programación. Sin embargo, ellos tendrán que tomar sus propias decisiones de todos modos. FWIW, no lo habría diseñado de esta manera, pero eso no es relevante.


MIN_VALUE debe llamarse EPSILON , es el valor positivo más pequeño que puede representar un flotante.

Debido a que un flotador usa la codificación de magnitud de signo, el valor más bajo que un flotador puede representar es -MAX_VALUE .


Una posible explicación podría ser que Java simplemente usó la misma convención de nomenclatura que C ++, que nuevamente heredó los nombres de C.

Java fue influenciado por C ++, que comparte el mismo patrón de denominación confuso. En C ++, la analogía de Float.MIN_VALUE es std::numeric_limits<T>::min() , que se define como:

Valor finito mínimo. Para tipos flotantes con desnormalización (número variable de bits de exponente): valor normalizado positivo mínimo.

En C ++, que es una fuente potencial de errores en el código de la plantilla, más adelante en C ++ 11, agregaron std::numeric_limits<T>::lowest() , que se define como:

Valor finito mínimo. (desde C ++ 11) Para tipos integrales: igual que min (). Para tipos de punto flotante: dependiente de la implementación; En general, el negativo de max ().

Pero C ++ no fue el primer idioma. Todo se remonta a C, que define a FLT_MIN el valor de punto flotante mínimo.

Entonces, ¿por qué C eligió definir los mínimos de números de coma flotante y enteros de manera inconsistente?

No estoy seguro, pero podría tener que ver con la simetría (ver esta respuesta ). Para los flotadores, puedes usar -FLT_MAX (o -Float.MAX_VALUE ). Para los enteros, negar el valor máximo no es portátil. De hecho, generalmente es incorrecto en todas las arquitecturas modernas (donde -INT_MAX == INT_MIN + 1 debe contener).





java