flt 1.5.3 → 1.5.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec3f00c70c9eb39227e1b5acf490afd57b9dcedfa3d4a1fe5b935debc6cafcd9
4
- data.tar.gz: 94808cc1dfe07687d93ff0c98b247373223683cad4a603ee7bda1ba33534ed79
3
+ metadata.gz: 884a9616a37e6a5ff27ccd739aad4ad825b04c89b00fc9ff888111b9e386f96a
4
+ data.tar.gz: 00f414c95fb04488487b1ffc020b35cc0fa9d0e162ffa8cffd7f9ae76cac936b
5
5
  SHA512:
6
- metadata.gz: b6f9272c9d849c240ff3697730e2465f4fbcbda9ebed66d75c6d36e866a02b5963cd664c0c0583e439747685c34562ed2ab83038f305ed12aa7a708848ec37c7
7
- data.tar.gz: 1f1c4783c08ea9c324495d341884aae192e79e657b51eb7ac69ce74ab55fabbd2646c892194463e60041d8273687e57552a43f652973346ade4319b403b41652
6
+ metadata.gz: 80fd95e11624c2e89789a9bd67cb530b9cde332d2f57b21603dfaa78ce43317032bf0aaf40bda33c2783cb2ef53dc381531d5daf1f3815b57b43511fe72f6895
7
+ data.tar.gz: 3d1c0e0c41a4b71e875eb0e4af7e285049b5775cec8537c7d06a60ef7ad22aed4f6810a99d5b22e3b0211c47881f65137a6e000e43c205f386c08149c7923802
@@ -1,3 +1,10 @@
1
+ == 1.5.4 2020-04-08
2
+
3
+ * Bugfix
4
+ - Allow scaleb when result is valid, e.g. now these are not invalid results (using float-formats):
5
+ + IEEE_binary256.context.minimum_normal.log10
6
+ + IEEE_binary256.context.maximum_finite.log10
7
+
1
8
  == 1.5.3 2020-04-07
2
9
 
3
10
  * Bugfix
@@ -2470,21 +2470,25 @@ class Num < Numeric
2470
2470
 
2471
2471
  # Adds a value to the exponent.
2472
2472
  def scaleb(other, context=nil)
2473
-
2474
2473
  context = define_context(context)
2475
2474
  other = _convert(other)
2476
2475
  ans = _check_nans(context, other)
2477
2476
  return ans if ans
2478
2477
  return context.exception(InvalidOperation) if other.infinite? || other.exponent != 0
2478
+ exp_inc = other.to_i
2479
2479
  unless context.exact?
2480
2480
  liminf = -2 * (context.emax + context.precision)
2481
2481
  limsup = 2 * (context.emax + context.precision)
2482
- i = other.to_i
2483
- return context.exception(InvalidOperation) if !((liminf <= i) && (i <= limsup))
2482
+ if finite?
2483
+ # Allow scaling a finite number which is originally out of the range
2484
+ # of the context if the end result is within it
2485
+ liminf = [context.etiny - @exp, liminf].min
2486
+ limsup = [context.etop - @exp, limsup].max
2487
+ end
2488
+ return context.exception(InvalidOperation) if !((liminf <= exp_inc) && (exp_inc <= limsup))
2484
2489
  end
2485
2490
  return Num(self) if infinite?
2486
- return Num(@sign, @coeff, @exp+i)._fix(context)
2487
-
2491
+ return Num(@sign, @coeff, @exp + exp_inc)._fix(context)
2488
2492
  end
2489
2493
 
2490
2494
  # Naive implementation of exponential and logarithm functions; should be replaced
@@ -2706,7 +2710,13 @@ class Num < Numeric
2706
2710
  @sign*0.0
2707
2711
  else
2708
2712
  f = nil
2709
- f ||= to_s.to_f if num_class.radix == 10 # very precise, but slow
2713
+ if num_class.radix == 10
2714
+ # to_f can emit verbose warnings on overflow/underflow
2715
+ old_verbose, $VERBOSE = $VERBOSE, nil
2716
+ # very precise, but slow
2717
+ f ||= to_s.to_f
2718
+ $VERBOSE = old_verbose
2719
+ end
2710
2720
  unless f
2711
2721
  c = @coeff.to_f
2712
2722
  if c.finite?
@@ -134,8 +134,9 @@ module Flt
134
134
  rev_sign = false
135
135
  s = nil
136
136
  num_class.context(self) do |local_context|
137
- local_context.precision += 3 # extra digits for intermediate steps
137
+ local_context.precision += 2 # extra digits for intermediate steps
138
138
  x,k,pi_2 = local_context.reduce_angle2(x,2)
139
+ local_context.precision += 2
139
140
  rev_sign = true if k>1
140
141
  if k % 2 == 0
141
142
  x = pi_2 - x
@@ -161,9 +162,10 @@ module Flt
161
162
  sign = x.sign
162
163
  s = nil
163
164
  num_class.context(self) do |local_context|
164
- local_context.precision += 3 # extra digits for intermediate steps
165
+ local_context.precision += 2 # extra digits for intermediate steps
165
166
  x = x.copy_sign(+1) if sign<0
166
167
  x,k,pi_2 = local_context.reduce_angle2(x,2)
168
+ local_context.precision += 2
167
169
  sign = -sign if k>1
168
170
  x = pi_2 - x if k % 2 == 1
169
171
  x = local_context.to_rad(x)
@@ -1,3 +1,3 @@
1
1
  module Flt
2
- VERSION = "1.5.3"
2
+ VERSION = "1.5.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.3
4
+ version: 1.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javier Goizueta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-07 00:00:00.000000000 Z
11
+ date: 2020-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler