New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error when raising to a BigDecimal #1967

Closed
benwoody opened this Issue Sep 12, 2014 · 3 comments

Comments

Projects
None yet
3 participants
@benwoody

benwoody commented Sep 12, 2014

When raising a FixNum to a BigDecimal, the operation errors claiming it expects a FixNum.

Repro:

Tested using jruby 1.7.15 (1.9.3p392)

require 'bigdecimal/math'
a = BigDecimal(1.2, 2)
2 ** a

Output:

TypeError: wrong argument type BigDecimal (expected Fixnum)
    from org/jruby/ext/bigdecimal/RubyBigDecimal.java:851:in `**'
    from org/jruby/RubyFixnum.java:723:in `**'
    from (irb):9:in `evaluate'
    from org/jruby/RubyKernel.java:1101:in `eval'
    from org/jruby/RubyKernel.java:1501:in `loop'
    from org/jruby/RubyKernel.java:1264:in `catch'
    from org/jruby/RubyKernel.java:1264:in `catch'

Expectations:

In MRI, this seems to be handled correctly, regardless of the type being raised. I would expect a BigDecimal to be returned from the equation.

@headius

This comment has been minimized.

Show comment
Hide comment
@headius

headius Sep 12, 2014

Member

Confirmed on 1.7 and master branches.

Member

headius commented Sep 12, 2014

Confirmed on 1.7 and master branches.

@benwoody

This comment has been minimized.

Show comment
Hide comment
@benwoody

benwoody Sep 15, 2014

Also, raising a BigDecimal to anything except a FixNum returns:

TypeError: wrong argument type Float (expected Fixnum)
    from org/jruby/ext/bigdecimal/RubyBigDecimal.java:842:in `**'
    from (irb):9:in `evaluate'
    from org/jruby/RubyKernel.java:1101:in `eval'
    from org/jruby/RubyKernel.java:1501:in `loop'
    from org/jruby/RubyKernel.java:1264:in `catch'
    from org/jruby/RubyKernel.java:1264:in `catch'

example:

require 'bigdecimal/math'
a = BigDecimal(1.2, 2)
a ** 0.2

benwoody commented Sep 15, 2014

Also, raising a BigDecimal to anything except a FixNum returns:

TypeError: wrong argument type Float (expected Fixnum)
    from org/jruby/ext/bigdecimal/RubyBigDecimal.java:842:in `**'
    from (irb):9:in `evaluate'
    from org/jruby/RubyKernel.java:1101:in `eval'
    from org/jruby/RubyKernel.java:1501:in `loop'
    from org/jruby/RubyKernel.java:1264:in `catch'
    from org/jruby/RubyKernel.java:1264:in `catch'

example:

require 'bigdecimal/math'
a = BigDecimal(1.2, 2)
a ** 0.2

kares added a commit to kares/jruby that referenced this issue Jun 4, 2015

handle big decimal ** float value calculation (with Java double math)…
… ...

since we're now not raising users should get ~ the value they expect (closing jruby#1967)

@kares kares self-assigned this Jun 4, 2015

@kares kares added this to the JRuby 1.7.21 milestone Jun 4, 2015

@kares

This comment has been minimized.

Show comment
Hide comment
@kares

kares Jun 4, 2015

Member

removed the incorrect failures (under >= 1.9) and implemented a helper that handles the float remainder of the exponent using Java double arithmetics ... it's not as precise as e.g. in the integer exponent case but we're close and it's better than not raising and returning something unexpectedly inaccurate here ...

Member

kares commented Jun 4, 2015

removed the incorrect failures (under >= 1.9) and implemented a helper that handles the float remainder of the exponent using Java double arithmetics ... it's not as precise as e.g. in the integer exponent case but we're close and it's better than not raising and returning something unexpectedly inaccurate here ...

@kares kares closed this Jun 4, 2015

kares added a commit that referenced this issue Jun 5, 2015

Merge branch 'jruby-1_7'
* jruby-1_7: (38 commits)
  basic BigDecimal sub-class test ... all working the same as MRI 1.8/1.9
  avoid deprecated newInstance + one less pattern to match on BigDecimal.new
  [bigdecimal] keep the simplified newInstance backport 1.8 compatible
  [bigdecimal] backport simplified newInstance impl from master
  minor BigDecimal code cleanup
  handle big decimal ** float value calculation (with Java double math) ... since we're now not raising users should get ~ the value they expect (closing #1967)
  static-ize and simplify private helpers
  BigDecimal should not raise error on pow/** with float arg (under 1.9 #1967)
  some more (internal) RubyBigDecimal dry-ing / tidy-ing
  do coercion on * and / (same as MRI has been doing since 1.8) ... fixes #2538
  handle BigDecimal cmp failure compatibly with MRI (fixes #2539)
  pass around context in BigDecimal impl + simplify cmp method's code
  move JI java.mat.BigDecimal test out of Ruby's BigDecimal tests
  [travis-ci] test-extended on jdk8
  if current directory is inside the classloader a spawn jruby process should do the same
  use the new bin stubs from new rubygems
  set ENV['RUBY'] when jruby.home is not regular directory
  Add support for http.nonProxyHosts and rework ENV_JAVA support.
  pik the right class in URLResourceTest
  use new JRuby.create to load script from command line script source
  ...

Conflicts:
	.travis.yml
	core/src/main/java/org/jruby/RubyDir.java
	core/src/main/java/org/jruby/RubyEnumerable.java
	core/src/main/java/org/jruby/RubyEnumerator.java
	core/src/main/java/org/jruby/RubyHash.java
	core/src/main/java/org/jruby/RubyInstanceConfig.java
	core/src/main/java/org/jruby/RubyModule.java
	core/src/main/java/org/jruby/ext/bigdecimal/RubyBigDecimal.java
	core/src/main/java/org/jruby/util/ClasspathResource.java
	core/src/main/java/org/jruby/util/URLResource.java
	core/src/test/java/org/jruby/util/URLResourceTest.java
	lib/ruby/2.0/net/http.rb
	lib/ruby/2.0/uri/generic.rb
	maven/jruby/src/it/runnable/spec/one_spec.rb
	test/test_backquote.rb
	test/test_big_decimal.rb
	test/test_dir.rb
	test/test_file.rb
	test/test_higher_javasupport.rb
	test/test_load.rb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment