2010-04-02 32 views
9

Estoy tratando de utilizar esta fórmula en JAVA: (ln (1-L))/L
No estoy seguro de cómo utilizar ln en Java.cómo usar ln en Java

+1

Si eres un chico matemáticas mirando en CS, tenga cuidado con los cálculos de coma flotante. Dependiendo de cómo elabore y calcule sus fórmulas, terminará con diferentes cantidades de error debido a la forma en que se manejan las matemáticas de punto flotante internamente. Si desea que la precisión del ancho fijo sea alta, querrá buscar otras bibliotecas matemáticas que 'java.lang.Math'. –

Respuesta

18

Math.log(d) devuelve el logaritmo natural (base e) de un valor doble.

Así que el código java será,

double result = (-Math.log(1-L))/L; 

(pero tenga en cuenta que es mejor tener nombres de variables en minúsculas - es decir l en lugar de L)

+0

¡gracias! Tengo una pregunta adicional ... ¿cómo puedo redondear un número en Java (en C era bastante fácil), por ejemplo, tengo este número 22.0363456586776, pero quiero mostrar 22.036345659 –

+1

En general, use DecimalFormat: http: // java. sun.com/javase/6/docs/api/java/text/DecimalFormat.html Si tiene un problema específico, no dude en publicarlo como una pregunta separada. – Pops

+0

Para la conversión a una cadena, puede usar String.format(), p. String.format ("%. 10f", x), para imprimir System.out.printf(). – starblue

4

Tampoco tenía ni idea, pero como es una función matemática común, revisé el Math class en el API.

Aquí van: the log method

EDIT: Lo siento por enlace roto, de rebajas se ha resuelto ahora. También me di cuenta justo después de publicar esta respuesta que suena sarcástica, que no era mi intención; las reformulaciones simplemente lo hacen parecer sarcástico Y sarcástico. Solo quería señalar que la API realmente es útil para métodos que razonablemente se espera que surjan mucho.

+0

Creo que -log1p (-L)/L podría ser más preciso para pequeñas L. – extraneon

+0

Buen punto. @fang, ¿estás usando un valor grande o pequeño para L? – Pops

+0

esa es la fórmula que me dieron. –