Calcular Pi en un teléfono Android

Estoy tratando de hacer un teléfono Android calcular n decimales de Pi. Para esto estoy usando este código:

public class Pi { private static final BigDecimal TWO = new BigDecimal(2); private static final BigDecimal FOUR = new BigDecimal(4); private String nummer; public void pi(final int SCALE) { BigDecimal a = ONE; BigDecimal b = ONE.divide(sqrt(TWO, SCALE), SCALE, ROUND_HALF_UP); BigDecimal t = new BigDecimal(0.25); BigDecimal x = ONE; BigDecimal y; while (!a.equals(b)) { y = a; a = a.add(b).divide(TWO, SCALE, ROUND_HALF_UP); b = sqrt(b.multiply(y), SCALE); t = t.subtract(x.multiply(y.subtract(a).multiply(y.subtract(a)))); x = x.multiply(TWO); } a.add(b).multiply(a.add(b)).divide(t.multiply(FOUR), SCALE, ROUND_HALF_UP); number(a); } public void number(BigDecimal a) { //nummer = a.toString().length(); nummer = a.toString(); } public String returnNum() { return nummer; } public static BigDecimal sqrt(BigDecimal A, final int SCALE) { BigDecimal x0 = new BigDecimal("0"); BigDecimal x1 = new BigDecimal(Math.sqrt(A.doubleValue())); while (!x0.equals(x1)) { x0 = x1; x1 = A.divide(x0, SCALE, ROUND_HALF_UP); x1 = x1.add(x0); x1 = x1.divide(TWO, SCALE, ROUND_HALF_UP); } return x1; } 

Esto funciona como un encanto en cualquier computadora, pero cuando intento ejecutar esto en mi tableta Android decide que Pi es 0.8 algo. ¿Por qué se produce este cálculo de falta y cómo puedo hacer que esto funcione?

Te falta un poco de tu cálculo. La línea :

 a.add(b).multiply(a.add(b)).divide(t.multiply(FOUR), SCALE, ROUND_HALF_UP); 

No está siendo asignado a nada. Asigne esto a algo e imprima ese valor y verá que su cálculo funciona.

 BigDecimal pi = a.add(b).multiply(a.add(b)).divide(t.multiply(FOUR), SCALE, ROUND_HALF_UP); System.out.println(pi) 

Esto me da la respuesta correcta.

Para los interesados, el algoritmo se puede encontrar en wikipedia

  • Cómo hacer HorizontalScrollView RIGHT a LEFT Scroll android
  • ¿Es posible, y cuál es la mejor estrategia, pasar objetos por referencia de una actividad a la siguiente?
  • Android: abre o reinicia la aplicación después de hacer clic en la notificación push mediante las actividades de bandera
  • Tengo un error: setOnItemClickListener no se puede utilizar con un spinner, ¿qué está mal?
  • Pruebas funcionales de Android Espresso con fragmentos
  • No se puede encontrar la clase MainActivity (proyecto importado)
  • Transparencia de OpenGL ES 2.0 mediante pruebas alfa en shader
  • Android: Objeto personalizado en AIDL
  • ¿Cuál es el código de color de Android Hint?
  • ¿Cómo saber si estoy en una llamada en Android?
  • Ant jar error: Execute failed: java.io.IOException: No se puede ejecutar el programa ... $ {aapt} ": error = 2, No hay tal archivo o directorio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.