BigMath methods returns inaccurate value for rational
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
Comece pelos pontos de entrada BigMath.exp, log, sqrt, sin e cos, concentrando-se na conversão de Rational para BigDecimal. Compare os exemplos de precision-50 e precision-1000 na issue para entender as perdas demonstradas. Considera-se concluído quando os casos de Rational relatados preservarem a precisão solicitada sem as discrepâncias mostradas.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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
- Linguagem predominante
- C
- Estrelas
- 152
- Forks
- 98
- Merge médio
- 6h 44min
- PRs com merge (30d)
- 2
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de ruby/bigdecimal
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
ruby/bigdecimal#569 ·
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
ruby/bigdecimal#566 ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
ruby/bigdecimal#506 · 4 comentários ·
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 30/100
ruby/bigdecimal#491 ·
-
BigDecimal#whole?Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
ruby/bigdecimal#291 · 6 comentários ·
Todas as issues de ruby/bigdecimal
Issues semelhantes
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
micropython/micropython#19906 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 75/100
Mantenedores costumam responder em até 10 dias
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 83/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
sk3llo/ffmpeg_kit_flutter#176 ·