BigMath methods returns inaccurate value for rational
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza por los puntos de entrada BigMath.exp, log, sqrt, sin y cos, centrándote en su conversión de Rational a BigDecimal. Compara los ejemplos de precision-50 y precision-1000 del issue para entender las pérdidas demostradas. Se considera terminado cuando los casos de Rational indicados conservan la precisión solicitada sin las discrepancias mostradas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Because Rational is simply converted to BigDecimal with the given precision. Precision is not that simple.
Though it may not be a responsibility for BigMath.
BigMath.exp: Maximum 19 digits precision loss
BigMath.exp(10**19/3r, 50).to_s[0,52]
#=> "0.31897971307307432918427098497346266668405585204999"
BigMath.exp(10**19/3r, 1000).to_s[0,52]
#=> "0.31897971307307432918427098497347329934115828786096"
BigMath.log: Many precision loss near x=1
BigMath.log(1+1r/12345**9, 50)
#=> 0.15016895257719999999999999999999999998872464284093e-36
BigMath.log(1+1r/12345**9, 1000).mult(1, 50)
#=> 0.1501689525772244244950394251097065861542145195459e-36
BigMath.sin: Many precision loss near x=n*π
x = (31415926535897932384626433832795 * 7 + 1).quo(7 * 10**40)
BigMath.sin(x, 50)
#=> 0.26542232205820974944592307816406286208998628034825e-40
BigMath.sin(x, 1000).mult(1, 50)
#=> 0.26542232248678117801735164959263429066141485177682e-40
Each method requires different Rational to BigDecimal conversion. For example:
- log:
x < 1/2r ? BigDecimal(x, prec) : BigDecimal(x - 1, prec) + 1 - exp:
BigDecimal(x, prec + [BigDecimal(x, 1).exponent, 0].max) - sqrt: Nothing special.
BigDecimal(x, prec) - sin, cos: Needs precision increasing loop
- Lenguaje dominante
- C
- Estrellas
- 152
- Forks
- 99
- Merge medio
- 6 h 44 min
- PR fusionados (30 d)
- 2
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ruby/bigdecimal
-
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
ruby/bigdecimal#569 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
ruby/bigdecimal#566 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
ruby/bigdecimal#506 · 4 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
ruby/bigdecimal#491 ·
-
BigDecimal#whole?Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
ruby/bigdecimal#291 · 6 comentarios ·
Todos los issues de ruby/bigdecimal
Issues similares
-
ai-driven-fuzzing bug claude Minor
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
linagora/open-bastion#425 ·
Los mantenedores suelen responder en 1 día
-
[docs] gravity.md notationsAbiertoquestion
Dificultad 1/5 Menos de una hora Aptitud para principiantes 68/100
-
follow-up Prio 📌
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
moonbitlang/async#713 ·
Los mantenedores suelen responder en 1 día
-
examples/dnsdoctor: cleanup.sh stops at the first missing piece of a setup.sh that did not finishAbiertoseverity: low
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
luainkernel/lunatik#2263 ·
Los mantenedores suelen responder en 1 día