hpsqrt 1.9.0 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/lib/hpsqrt.rb +50 -50
- data/lib/hpsqrt/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bdf439f0e309a02b4f3356ae7e8ca8de9488fab3b46a167b0c8cfc0c84db4b55
|
4
|
+
data.tar.gz: 2f5e1f9badf7dad530ab0b37b5c138d24a067c665ecd646ebc744c015e650ee9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e4c2b6a8b6e83a73d7b01a34bbb04500f4067d25b2bc335ae318632187544e0e75061f5adf1b75bb922770570937aebdde5a4d4418ab61398e3c13c1a1e0418
|
7
|
+
data.tar.gz: 0f588870311f93645d491b4b71da5ea1e7780527bb7a365258ed7aba3b6e7bdfef419b306fc7aeef1db949ce321f5af2fb4ba7e0b49dd3208eda54872b841427
|
data/README.md
CHANGED
@@ -69,7 +69,7 @@ p Sqrt(4).to_r
|
|
69
69
|
p (Sqrt(2)**2).to_rc
|
70
70
|
# => ((2/1)+(0/1)*i)
|
71
71
|
|
72
|
-
# to Complex
|
72
|
+
# to Complex (involving Float)
|
73
73
|
p Sqrt(-1i).to_c
|
74
74
|
# => (0.7071067811865476-0.7071067811865476i)
|
75
75
|
|
@@ -81,6 +81,7 @@ p Sqrt(-1i).real
|
|
81
81
|
p Sqrt(1i).imag
|
82
82
|
# => -0.7071067811865476
|
83
83
|
|
84
|
+
# to expression string
|
84
85
|
p (Sqrt(5) + Sqrt(7)).expr
|
85
86
|
# => "√5 + √7"
|
86
87
|
```
|
data/lib/hpsqrt.rb
CHANGED
@@ -145,10 +145,19 @@ class HpSqrt < Numeric
|
|
145
145
|
alias_method :angle, :arg
|
146
146
|
alias_method :phase, :arg
|
147
147
|
|
148
|
+
def to_rc
|
149
|
+
@cache[:to_rc] ||= @terms.map {|t, c|
|
150
|
+
nc = Complex(t.number.real.to_r, t.number.imag.to_r)
|
151
|
+
|
152
|
+
sc = Math.sqrt(Complex(t.sqrt))
|
153
|
+
sc = Complex(sc.real.to_r, sc.imag.to_r)
|
154
|
+
|
155
|
+
nc * sc * c
|
156
|
+
}.sum(Complex(0.to_r, 0.to_r))
|
157
|
+
end
|
158
|
+
|
148
159
|
def to_c
|
149
|
-
@cache[:to_c] ||=
|
150
|
-
t.number * Math.sqrt(Complex(t.sqrt)) * c
|
151
|
-
}.sum.to_c
|
160
|
+
@cache[:to_c] ||= Complex(to_rc.real.to_f, to_rc.imag.to_f)
|
152
161
|
end
|
153
162
|
|
154
163
|
def real
|
@@ -176,17 +185,6 @@ class HpSqrt < Numeric
|
|
176
185
|
end
|
177
186
|
end
|
178
187
|
|
179
|
-
def to_rc
|
180
|
-
@cache[:to_rc] ||= @terms.map {|t, c|
|
181
|
-
nc = Complex(t.number.real.to_r, t.number.imag.to_r)
|
182
|
-
|
183
|
-
sc = Math.sqrt(Complex(t.sqrt))
|
184
|
-
sc = Complex(sc.real.to_r, sc.imag.to_r)
|
185
|
-
|
186
|
-
nc * sc * c
|
187
|
-
}.sum.nonzero? || Complex(0.to_r, 0.to_r)
|
188
|
-
end
|
189
|
-
|
190
188
|
def to_r
|
191
189
|
if to_rc.imag.zero?
|
192
190
|
to_rc.real
|
@@ -196,43 +194,45 @@ class HpSqrt < Numeric
|
|
196
194
|
end
|
197
195
|
|
198
196
|
def expr
|
199
|
-
|
200
|
-
|
201
|
-
v
|
202
|
-
|
203
|
-
|
204
|
-
v
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
v
|
209
|
-
|
210
|
-
|
211
|
-
|
197
|
+
@cache[:expr] ||= begin
|
198
|
+
value_to_s = -> (v) {
|
199
|
+
if Complex===v && v.imag.zero?
|
200
|
+
v = v.real
|
201
|
+
end
|
202
|
+
if Rational===v && v.denominator==1
|
203
|
+
v = v.numerator
|
204
|
+
end
|
205
|
+
v = v.to_s
|
206
|
+
if v !~ /^[\d\.]+$/
|
207
|
+
v = "(%s)" % v
|
208
|
+
end
|
209
|
+
v
|
210
|
+
}
|
212
211
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
212
|
+
result = @terms.map {|t, c|
|
213
|
+
n = t.number * c
|
214
|
+
s = t.sqrt
|
215
|
+
|
216
|
+
if s!=1
|
217
|
+
if n==1
|
218
|
+
"\u221A%s" % value_to_s[s]
|
219
|
+
elsif 0<n.real
|
220
|
+
"%s\u221A%s" % [value_to_s[n], value_to_s[s]]
|
221
|
+
elsif n==-1
|
222
|
+
"(-\u221A%s)" % value_to_s[s]
|
223
|
+
else
|
224
|
+
"(%s\u221A%s)" % [value_to_s[n], value_to_s[s]]
|
225
|
+
end
|
224
226
|
else
|
225
|
-
|
227
|
+
value_to_s[n]
|
226
228
|
end
|
229
|
+
}
|
230
|
+
|
231
|
+
if 0<result.length
|
232
|
+
result.join(" + ")
|
227
233
|
else
|
228
|
-
|
234
|
+
"0"
|
229
235
|
end
|
230
|
-
}
|
231
|
-
|
232
|
-
if 0<result.length
|
233
|
-
result.join(" + ")
|
234
|
-
else
|
235
|
-
"0"
|
236
236
|
end
|
237
237
|
end
|
238
238
|
|
@@ -256,15 +256,15 @@ class HpSqrt < Numeric
|
|
256
256
|
end
|
257
257
|
|
258
258
|
def complex?
|
259
|
-
!imag.zero?
|
259
|
+
!to_rc.imag.zero?
|
260
260
|
end
|
261
261
|
|
262
262
|
def integer?
|
263
|
-
imag.zero? && real==
|
263
|
+
to_rc.imag.zero? && to_rc.real.denominator==1
|
264
264
|
end
|
265
265
|
|
266
266
|
def float?
|
267
|
-
imag.zero? &&
|
267
|
+
to_rc.imag.zero? && to_rc.real.denominator!=1
|
268
268
|
end
|
269
269
|
|
270
270
|
def self.create(v)
|
@@ -285,7 +285,7 @@ class HpSqrt < Numeric
|
|
285
285
|
|
286
286
|
def self.sqrt(v)
|
287
287
|
if self===v
|
288
|
-
v = v.
|
288
|
+
v = v.to_rc
|
289
289
|
end
|
290
290
|
if v!=0
|
291
291
|
new({Term.new(sqrt: v) => 1})
|
data/lib/hpsqrt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hpsqrt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoshida Tetsuya
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|