phys-units 0.9.1 → 0.9.2

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
  SHA1:
3
- metadata.gz: 8fd589f3ac5dded9010b0d83ba9f31abccc40a4f
4
- data.tar.gz: 17427a7a2bcb4631adea755b4fed53e9f0adccdd
3
+ metadata.gz: 562362594d0457c4492bc6a2467e2ee271c81dab
4
+ data.tar.gz: 86d22f70ec1f1962631fde49b63fcf72e408650b
5
5
  SHA512:
6
- metadata.gz: a5018dbf704ba64a03afcfa92718389636f9ac058ee633eebe81ef5e27353178bb7eb9e9c88b127508258d12584071ab32a37df3827e66f26e46fe5909266cff
7
- data.tar.gz: 02d92bee85d27cfc47555a3b14bad2b0c2df683786700e73747d0b1a2c65737b9241f081bb03d2ff569d76af54ad1561ad711342ac3c80db7eb5b840e0dd86ac
6
+ metadata.gz: 1124141150ac160dcd3568ba3507e0cf86d1521ba80e49a7c6307b7130710943fa1e7452b3f0df54fe2bc885f67cd690f3f433ecdd7f28605897d3736cd37060
7
+ data.tar.gz: d92bfe06366359ff027c0eb599d2bd8c78c7795a8c4743789c017bdb23b6d9725e0c2a1d46ca30815f0f854f817c012e6ed546db680b4bc7fa75ed97c136ca4f
data/README.md CHANGED
@@ -5,7 +5,17 @@ Former name is [Quanty](http://narray.rubyforge.org/quanty/quanty-en.html),
5
5
  the first Ruby units library released in 2001.
6
6
 
7
7
  ## Phys::Quantity
8
- is a primary class of Phys-Units library, to be manipulated by users.
8
+ is the primary class of Phys-Units library, to be manipulated by users.
9
+ It contains:
10
+
11
+ * *Value* :
12
+ +value+ must be a class instance having arithmetic methods,
13
+ but it is not necessary to be a Numeric.
14
+ This is a duck typing way.
15
+ * *Unit* :
16
+ +unit+ is a instance of Phys::Unit class
17
+ obtained by parsing a +expr+ string.
18
+
9
19
  See Documentation at [Rubygems Site](https://rubygems.org/gems/phys-units)
10
20
 
11
21
  ## Installation
@@ -36,7 +46,7 @@ Phys-Units library is discriminated from many other units libraies for Ruby,
36
46
  by the following features:
37
47
 
38
48
  * Compatible with GNU Units except nonlinear units.
39
- * Provides 2415 units, 85 prefixes, including UTF-8 unit names.
49
+ * Provides 2331 units, 85 prefixes, including UTF-8 unit names.
40
50
  * All units are defined in a unit data file from GNU Units
41
51
  and not defined as a Ruby codes, except temperature definitions.
42
52
  * No addition or modification to Ruby standard classes by default,
@@ -47,8 +57,18 @@ by the following features:
47
57
  in the decimal form such as `1.0e10'.
48
58
  * PI number has a dimension.
49
59
 
60
+ ## Platforms tested
61
+
62
+ * ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]
63
+
50
64
  ## Copying License
51
- GPL3
65
+
66
+ This program is free software.
67
+ You can distribute/modify this program
68
+ under the same terms as GPL3.
69
+ See "COPYING" file.
70
+ NO WARRANTY.
52
71
 
53
72
  ## Author
73
+
54
74
  Masahiro TANAKA
@@ -927,8 +927,8 @@ wc water # water column
927
927
  mach 331.46 m/s # speed of sound in dry air at STP
928
928
  standardtemp 273.15 K # standard temperature
929
929
  stdtemp standardtemp
930
- normaltemp tempF(70) # for gas density, from NIST
931
- normtemp normaltemp # Handbook 44
930
+ #normaltemp tempF(70) # for gas density, from NIST
931
+ #normtemp normaltemp # Handbook 44
932
932
 
933
933
  # Weight of mercury and water at different temperatures using the standard
934
934
  # force of gravity.
@@ -3446,62 +3446,6 @@ megalerg megaerg # 'L' added to make it pronounceable [18].
3446
3446
 
3447
3447
  unitedstatesdollar US$
3448
3448
  $ dollar
3449
- mark germanymark
3450
- bolivar venezuelanbolivarfuerte
3451
- bolivarfuerte bolivar # The currency was revalued by
3452
- oldbolivar 1|1000 bolivar # a factor of 1000.
3453
- peseta spainpeseta
3454
- rand southafricarand
3455
- escudo portugalescudo
3456
- guilder netherlandsguilder
3457
- hollandguilder netherlandsguilder
3458
- peso mexicopeso
3459
- yen japanyen
3460
- lira italylira
3461
- rupee indiarupee
3462
- drachma greecedrachma
3463
- franc francefranc
3464
- markka finlandmarkka
3465
- britainpound unitedkingdompound
3466
- greatbritainpound unitedkingdompound
3467
- poundsterling britainpound
3468
- yuan chinayuan
3469
-
3470
- # Some European currencies have permanent fixed exchange rates with
3471
- # the Euro. These rates were taken from the EC's web site:
3472
- # http://ec.europa.eu/economy_finance/euro/adoption/conversion/index_en.htm
3473
-
3474
- austriaschilling 1|13.7603 euro
3475
- belgiumfranc 1|40.3399 euro
3476
- estoniakroon 1|15.6466 euro # Equal to 1|8 germanymark
3477
- finlandmarkka 1|5.94573 euro
3478
- francefranc 1|6.55957 euro
3479
- germanymark 1|1.95583 euro
3480
- greecedrachma 1|340.75 euro
3481
- irelandpunt 1|0.787564 euro
3482
- italylira 1|1936.27 euro
3483
- luxembourgfranc 1|40.3399 euro
3484
- netherlandsguilder 1|2.20371 euro
3485
- portugalescudo 1|200.482 euro
3486
- spainpeseta 1|166.386 euro
3487
- cypruspound 1|0.585274 euro
3488
- maltalira 1|0.429300 euro
3489
- sloveniatolar 1|239.640 euro
3490
- slovakiakoruna 1|30.1260 euro
3491
-
3492
- UKP GBP # Not an ISO code, but looks like one, and
3493
- # sometimes used on usenet.
3494
- VEB 1|1000 VEF # old venezuelan bolivar
3495
-
3496
- !include currency.units
3497
-
3498
- # Money on the gold standard, used in the late 19th century and early
3499
- # 20th century.
3500
-
3501
- olddollargold 23.22 grains goldprice # Used until 1934
3502
- newdollargold 96|7 grains goldprice # After Jan 31, 1934
3503
- dollargold newdollargold
3504
- poundgold 113 grains goldprice
3505
3449
 
3506
3450
  # Nominal masses of US coins. Note that dimes, quarters and half dollars
3507
3451
  # have weight proportional to value. Before 1965 it was $40 / kg.
@@ -3513,45 +3457,6 @@ USquarterweight US$ 0.25 / (20 US$ / lb) # Since 1965
3513
3457
  UShalfdollarweight US$ 0.50 / (20 US$ / lb) # Since 1971
3514
3458
  USdollarmass 8.1 grams
3515
3459
 
3516
- # British currency
3517
-
3518
- quid britainpound # Slang names
3519
- fiver 5 quid
3520
- tenner 10 quid
3521
- monkey 500 quid
3522
- brgrand 1000 quid
3523
- bob shilling
3524
-
3525
- shilling 1|20 britainpound # Before decimalisation, there
3526
- oldpence 1|12 shilling # were 20 shillings to a pound,
3527
- farthing 1|4 oldpence # each of twelve old pence
3528
- guinea 21 shilling # Still used in horse racing
3529
- crown 5 shilling
3530
- florin 2 shilling
3531
- groat 4 oldpence
3532
- tanner 6 oldpence
3533
- brpenny 0.01 britainpound
3534
- pence brpenny
3535
- tuppence 2 pence
3536
- tuppenny tuppence
3537
- ha'penny halfbrpenny
3538
- hapenny ha'penny
3539
- oldpenny oldpence
3540
- oldtuppence 2 oldpence
3541
- oldtuppenny oldtuppence
3542
- threepence 3 oldpence # threepence never refers to new money
3543
- threepenny threepence
3544
- oldthreepence threepence
3545
- oldthreepenny threepence
3546
- oldhalfpenny halfoldpenny
3547
- oldha'penny oldhalfpenny
3548
- oldhapenny oldha'penny
3549
- brpony 25 britainpound
3550
-
3551
- # Canadian currency
3552
-
3553
- loony 1 canadadollar # This coin depicts a loon
3554
- toony 2 canadadollar
3555
3460
 
3556
3461
  #
3557
3462
  # Units used for measuring volume of wood
@@ -5205,7 +5110,7 @@ hogshead brhogshead
5205
5110
  # U+2150- 1|7 For some reason these characters are getting
5206
5111
  # U+2151- 1|9 flagged as invalid UTF8.
5207
5112
  # U+2152- 1|10
5208
- exp(1) # U+212F, base of natural log
5113
+ #ℯ exp(1) # U+212F, base of natural log
5209
5114
 
5210
5115
  µ- micro # micro sign U+00B5
5211
5116
  μ- micro # small mu U+03BC
@@ -5223,13 +5128,6 @@ röntgen roentgen
5223
5128
  K K # Kelvin symbol, U+212A
5224
5129
  ℓ liter # unofficial abbreviation used in some places
5225
5130
  ¢ cent
5226
- £ britainpound
5227
- ¥ japanyen
5228
- € euro
5229
- ₩ southkoreawon
5230
- ₪ israelnewshekel
5231
- ₤ lira
5232
- ₨ rupee
5233
5131
 
5234
5132
  Ω ohm # Ohm symbol U+2126
5235
5133
  Ω ohm # Greek capital omega U+03A9
@@ -5403,4 +5301,6 @@ module Phys
5403
5301
  zero_degc = Unit["stdtemp"].conversion_factor
5404
5302
  OffsetUnit.define( "tempC", Unit["K"], zero_degc )
5405
5303
  OffsetUnit.define( "tempF", Unit["K"]*Rational(5,9), zero_degc-32*Rational(5,9) )
5304
+
5305
+ #puts "#{Phys::Unit::LIST.size} units, #{Phys::Unit::PREFIX.size} prefixes"
5406
5306
  end
@@ -481,7 +481,6 @@ module_eval(<<'...end parse.y/module_eval...', 'parse.y', 63)
481
481
 
482
482
  def parse( str )
483
483
  return Unit.new(str) if str.empty?
484
- #p str
485
484
  @q = []
486
485
 
487
486
  c = Unit.unit_chars
@@ -490,15 +489,24 @@ module_eval(<<'...end parse.y/module_eval...', 'parse.y', 63)
490
489
  case str
491
490
  when /\A[\s]+/o
492
491
  when /\A(\d+)(?:(?:\.(\d*))?(?:[eE]([+-]?\d+))?)/o
493
- @q.push [:NUMBER, build_num($1,$2,$3)]
492
+ @q.push [:NUMBER, build_num($1,$2,$3)]
494
493
  when /\A(sin|cos|tan|log|ln|log2)\b/o
495
494
  @q.push [:UFUNC, $&]
496
495
  when /\A\//o
497
496
  @q.push [:DIV, $&]
498
497
  when /\Aper\b/o
499
498
  @q.push [:DIV, $&]
500
- when /\A[^#{c}0-9,.-]+([^#{c}$-]*[^#{c}1-9,.])?/o
501
- @q.push [:WORD, $&]
499
+ when /\A([^#{c}0-9,.-]([^#{c}$-]*[^#{c}0-9,.])?)(\d)?/o
500
+ a = $&
501
+ x = $1
502
+ n = $3
503
+ if n && n.to_i >= 2
504
+ @q.push [:WORD, x]
505
+ @q.push [:POW, '']
506
+ @q.push [:NUMBER, n.to_i]
507
+ else
508
+ @q.push [:WORD, a]
509
+ end
502
510
  when /\A[%'"]'?/o
503
511
  @q.push [:WORD, $&]
504
512
  when /\A\^|\A\*\*/o
@@ -41,7 +41,7 @@ rule
41
41
 
42
42
  list: numexpr
43
43
  | pexpr
44
- | WORD { result = Unit.word(val[0]) }
44
+ | WORD { result = Unit.word(val[0]) }
45
45
  | list list = MULTIPLY { result = val[0] * val[1] }
46
46
  | list POW list { result = val[0]** val[2] }
47
47
  | list POW '-' list = POW { result = val[0]**(-val[3]) }
@@ -81,7 +81,6 @@ class Unit
81
81
 
82
82
  def parse( str )
83
83
  return Unit.new(str) if str.empty?
84
- #p str
85
84
  @q = []
86
85
 
87
86
  c = Unit.unit_chars
@@ -90,15 +89,24 @@ class Unit
90
89
  case str
91
90
  when /\A[\s]+/o
92
91
  when /\A(\d+)(?:(?:\.(\d*))?(?:[eE]([+-]?\d+))?)/o
93
- @q.push [:NUMBER, build_num($1,$2,$3)]
92
+ @q.push [:NUMBER, build_num($1,$2,$3)]
94
93
  when /\A(sin|cos|tan|log|ln|log2)\b/o
95
94
  @q.push [:UFUNC, $&]
96
95
  when /\A\//o
97
96
  @q.push [:DIV, $&]
98
97
  when /\Aper\b/o
99
98
  @q.push [:DIV, $&]
100
- when /\A[^#{c}0-9,.-]+([^#{c}$-]*[^#{c}1-9,.])?/o
101
- @q.push [:WORD, $&]
99
+ when /\A([^#{c}0-9,.-]([^#{c}$-]*[^#{c}0-9,.])?)(\d)?/o
100
+ a = $&
101
+ x = $1
102
+ n = $3
103
+ if n && n.to_i >= 2
104
+ @q.push [:WORD, x]
105
+ @q.push [:POW, '']
106
+ @q.push [:NUMBER, n.to_i]
107
+ else
108
+ @q.push [:WORD, a]
109
+ end
102
110
  when /\A[%'"]'?/o
103
111
  @q.push [:WORD, $&]
104
112
  when /\A\^|\A\*\*/o
@@ -9,14 +9,21 @@
9
9
 
10
10
  module Phys
11
11
 
12
+ # alias to Phys::Quantity.new
12
13
  def Quantity(*a)
13
14
  Quantity.new(*a)
14
15
  end
15
16
 
16
17
  # Phys::Quantity is a class to represent physical quantities
17
18
  # with unit of measure.
18
- # It contains a value in Numeric or similar class,
19
- # and unit in Phys::Unit class.
19
+ # It contains:
20
+ # * *Value* of the quantity.
21
+ # +value+ must be a class instance having arithmetic methods,
22
+ # but it is not necessary to be a Numeric.
23
+ # This is a duck typing way.
24
+ # * *Unit* of the quantity.
25
+ # +unit+ is a instance of Phys::Unit class
26
+ # obtained by parsing a +expr+ string.
20
27
  #== Usage
21
28
  # require 'phys/units'
22
29
  # Q=Phys::Quantity
@@ -33,7 +40,7 @@ module Phys
33
40
  # Alias to Phys::Quantity.new.
34
41
  # @param [Object] value
35
42
  # Value of quantity.
36
- # @param [String] expr unit expression.
43
+ # @param [String] expr a string of unit expression.
37
44
  # If +expr+ is not supplied, it becomes dimeinsionless.
38
45
  # @return [Phys::Quantity]
39
46
  # @raise [Phys::UnitConversionError] if unit conversion is failed.
@@ -45,9 +52,7 @@ module Phys
45
52
  # Initialize a new quantity.
46
53
  # @param [Object] value
47
54
  # Value of quantity.
48
- # +value+ must be a class instance having arithmetic methods
49
- # in a duck typing way.
50
- # @param [String] expr unit expression.
55
+ # @param [String] expr a string of unit expression.
51
56
  # If +expr+ is not supplied, it becomes dimeinsionless.
52
57
  # @param [Phys::Unit] unit (optional)
53
58
  # @raise [Phys::UnitConversionError] if unit conversion is failed.
@@ -86,7 +91,7 @@ module Phys
86
91
  end
87
92
  alias convert want
88
93
 
89
- # Addition of two quantities.
94
+ # Addition.
90
95
  # Before the operation, it converts +other+ to the unit of +self+.
91
96
  # * If the +other+ param is Phys::Quantity,
92
97
  # +other+ is converted to the unit of +self+.
@@ -101,7 +106,7 @@ module Phys
101
106
  self.class.new( val, @expr, @unit )
102
107
  end
103
108
 
104
- # Subtraction of two quantities.
109
+ # Subtraction.
105
110
  # Before the operation, it converts +other+ to the unit of +self+.
106
111
  # * If the +other+ param is Phys::Quantity,
107
112
  # +other+ is converted to the unit of +self+.
@@ -116,32 +121,32 @@ module Phys
116
121
  self.class.new( val, @expr, @unit )
117
122
  end
118
123
 
119
- # @return [Phys::Quantity] abs quantity in the unit of +self+.
124
+ # @return [Phys::Quantity] Abs. in the unit of +self+.
120
125
  def abs
121
126
  self.class.new( @val.abs, @expr, @unit )
122
127
  end
123
128
 
124
- # @return [Phys::Quantity] abs2 quantity in the squared unit of +self+.
129
+ # @return [Phys::Quantity] Abs2. in the squared unit of +self+.
125
130
  def abs2
126
131
  self**2
127
132
  end
128
133
 
129
- # @return [Phys::Quantity] ceil quantity in the unit of +self+.
134
+ # @return [Phys::Quantity] Ceil. in the unit of +self+.
130
135
  def ceil
131
136
  self.class.new( @val.ceil, @expr, @unit )
132
137
  end
133
138
 
134
- # @return [Phys::Quantity] round quantity in the unit of +self+.
139
+ # @return [Phys::Quantity] Round. in the unit of +self+.
135
140
  def round
136
141
  self.class.new( @val.round, @expr, @unit )
137
142
  end
138
143
 
139
- # @return [Phys::Quantity] floor quantity in the unit of +self+.
144
+ # @return [Phys::Quantity] Floor. in the unit of +self+.
140
145
  def floor
141
146
  self.class.new( @val.floor, @expr, @unit )
142
147
  end
143
148
 
144
- # @return [Phys::Quantity] truncate quantity in the unit of +self+.
149
+ # @return [Phys::Quantity] Truncate. in the unit of +self+.
145
150
  def truncate
146
151
  self.class.new( @val.truncate, @expr, @unit )
147
152
  end
@@ -153,58 +158,81 @@ module Phys
153
158
  end
154
159
 
155
160
  # Unary Minus.
156
- # @return [Phys::Quantity] a quantity in the unit of +self+.
161
+ # @return [Phys::Quantity] in the unit of +self+.
157
162
  def -@
158
163
  self.class.new( -@val, @expr, @unit )
159
164
  end
160
165
 
161
166
  # Comparison of quantities.
162
167
  # Before the comparison, it converts +other+ to the unit of +self+.
168
+ # @param [Phys::Quantity] other
163
169
  # @return [Integer]
170
+ # @raise [Phys::UnitConversionError] if unit conversion is failed.
164
171
  def <=> (other)
165
172
  @val <=> @unit.convert(other)
166
173
  end
167
174
 
168
- # Comparison of quantities.
175
+ # Comparison. Returns +true+ if +self+ has the same value as +other+.
169
176
  # Before the comparison, it converts +other+ to the unit of +self+.
177
+ # @param [Phys::Quantity] other
170
178
  # @return [Boolean]
179
+ # @raise [Phys::UnitConversionError] if unit conversion is failed.
171
180
  def == (other)
172
181
  @val == @unit.convert(other)
173
182
  end
174
183
 
175
- # Comparison of quantities.
184
+ # Comparison. Returns +true+ if +self+ is greather-than or equal-to +other+.
176
185
  # Before the comparison, it converts +other+ to the unit of +self+.
186
+ # @param [Phys::Quantity] other
177
187
  # @return [Boolean]
188
+ # @raise [Phys::UnitConversionError] if unit conversion is failed.
178
189
  def >= (other)
179
190
  @val >= @unit.convert(other)
180
191
  end
181
192
 
182
- # Comparison of quantities.
193
+ # Comparison. Returns +true+ if +self+ is less-than or equal-to +other+.
183
194
  # Before the comparison, it converts +other+ to the unit of +self+.
195
+ # @param [Phys::Quantity] other
184
196
  # @return [Boolean]
197
+ # @raise [Phys::UnitConversionError] if unit conversion is failed.
185
198
  def <= (other)
186
199
  @val <= @unit.convert(other)
187
200
  end
188
201
 
189
- # Comparison of quantities.
202
+ # Comparison. Returns +true+ if +self+ is less than +other+.
190
203
  # Before the comparison, it converts +other+ to the unit of +self+.
204
+ # @param [Phys::Quantity] other
191
205
  # @return [Boolean]
206
+ # @raise [Phys::UnitConversionError] if unit conversion is failed.
192
207
  def < (other)
193
208
  @val < @unit.convert(other)
194
209
  end
195
210
 
196
- # Comparison of quantities.
211
+ # Comparison. Returns +true+ if +self+ is greater than +other+.
197
212
  # Before the comparison, it converts +other+ to the unit of +self+.
213
+ # @param [Phys::Quantity] other
198
214
  # @return [Boolean]
215
+ # @raise [Phys::UnitConversionError] if unit conversion is failed.
199
216
  def > (other)
200
217
  @val > @unit.convert(other)
201
218
  end
202
219
 
220
+ # Closeness. Returns +true+ if +self+ and +other+ is close to each other
221
+ # within +epsilon+ relative to the absolute values.
222
+ # Before the comparison, it converts +other+ to the unit of +self+.
223
+ # @param [Phys::Quantity] other
224
+ # @param [Numeric] epsilon
225
+ # @return [Boolean]
226
+ # @raise [Phys::UnitConversionError] if unit conversion is failed.
227
+ def close_to(other,epsilon=Float::EPSILON)
228
+ other_value = @unit.convert(other)
229
+ (@val-other_value).abs/(@val.abs+other_value.abs) <= epsilon
230
+ end
231
+
203
232
  # Power of a quantity.
204
233
  # @param [Numeric] n
205
234
  # @return [Phys::Quantity] a quantity in the +n+ -powered unit of +self+.
206
235
  # @raise [Phys::UnitConversionError] if unit conversion is failed.
207
- #
208
236
  def **(n)
209
237
  if @expr.nil?
210
238
  expr = nil
@@ -240,7 +268,7 @@ module Phys
240
268
  end
241
269
  end
242
270
 
243
- # Multiplication of two quantities.
271
+ # Multiplication.
244
272
  # If the +other+ param is *not* Phys::Quantity,
245
273
  # +other+ is regarded as a dimensionless value.
246
274
  # @param [Object] other
@@ -258,7 +286,7 @@ module Phys
258
286
  end
259
287
  end
260
288
 
261
- # Division of two quantities.
289
+ # Division.
262
290
  # If the +other+ param is *not* Phys::Quantity,
263
291
  # +other+ is regarded as a dimensionless value.
264
292
  # @param [Object] other
@@ -276,7 +304,7 @@ module Phys
276
304
  end
277
305
  end
278
306
 
279
- # Division of two quantities.
307
+ # Division more correctly.
280
308
  # If the +other+ param is *not* Phys::Quantity,
281
309
  # +other+ is regarded as a dimensionless value.
282
310
  # @param [Object] other
@@ -295,7 +323,7 @@ module Phys
295
323
  end
296
324
  alias fdiv quo
297
325
 
298
- # Division of two quantities without Remainder.
326
+ # Division without Modulo.
299
327
  # * If the +other+ param is Phys::Quantity,
300
328
  # +other+ is converted to the unit of +self+,
301
329
  # and returns +div+ of values.
@@ -314,7 +342,7 @@ module Phys
314
342
  end
315
343
  end
316
344
 
317
- # Remainder of two quantities.
345
+ # Remainder.
318
346
  # * If the +other+ param is Phys::Quantity,
319
347
  # +other+ is converted to the unit of +self+,
320
348
  # and returns +remainder+ of values.
@@ -333,7 +361,7 @@ module Phys
333
361
  end
334
362
  end
335
363
 
336
- # Modulo of two quantities.
364
+ # Modulo.
337
365
  # * If the +other+ param is Phys::Quantity,
338
366
  # +other+ is converted to the unit of +self+,
339
367
  # and returns +modulo+ of values.
@@ -353,7 +381,7 @@ module Phys
353
381
  end
354
382
  alias modulo %
355
383
 
356
- # Division and Modulo of two quantities.
384
+ # Division with Modulo.
357
385
  # * If the +other+ param is Phys::Quantity,
358
386
  # +other+ is converted to the unit of +self+,
359
387
  # and returns +divmod+ of values.
@@ -383,7 +411,6 @@ module Phys
383
411
  # Returns the quantity converted to a base unit.
384
412
  # @return [Phys::Quantity] a quantity in the base unit.
385
413
  # @raise [Phys::UnitConversionError] if unit conversion is failed.
386
- #
387
414
  def to_base_unit
388
415
  unit = @unit.base_unit
389
416
  val = unit.convert(self)
@@ -396,7 +423,6 @@ module Phys
396
423
  # Conversion to Numeric.
397
424
  # @return [Numeric]
398
425
  # @raise [Phys::UnitConversionError] if the unit is non-dminensionless.
399
- #
400
426
  def to_numeric
401
427
  @unit.convert_to_numeric(@val)
402
428
  end
@@ -405,7 +431,6 @@ module Phys
405
431
  # Conversion to Float.
406
432
  # @return [Float]
407
433
  # @raise [Phys::UnitConversionError] if the unit is non-dminensionless.
408
- #
409
434
  def to_f
410
435
  to_numeric.to_f
411
436
  end
@@ -414,7 +439,6 @@ module Phys
414
439
  # Conversion to Integer.
415
440
  # @return [Integer]
416
441
  # @raise [Phys::UnitConversionError] if the unit is non-dminensionless.
417
- #
418
442
  def to_i
419
443
  to_numeric.to_i
420
444
  end
@@ -424,7 +448,6 @@ module Phys
424
448
  # Conversion to Rational.
425
449
  # @return [Rational]
426
450
  # @raise [Phys::UnitConversionError] if the unit is non-dminensionless.
427
- #
428
451
  def to_r
429
452
  to_numeric.to_r
430
453
  end
@@ -432,7 +455,6 @@ module Phys
432
455
 
433
456
  # Conversion to String.
434
457
  # @return [String]
435
- #
436
458
  def to_s
437
459
  if @expr
438
460
  expr = ",'" +@expr+"'"
@@ -444,7 +466,6 @@ module Phys
444
466
 
445
467
  # Inspect String.
446
468
  # @return [String]
447
- #
448
469
  def inspect
449
470
  if @expr
450
471
  expr = "," +@expr.inspect
@@ -212,7 +212,7 @@ module Phys
212
212
  end
213
213
 
214
214
  def base_unit
215
- Unit.new(1,dim)
215
+ Unit.new(1,dimensionless_deleted)
216
216
  end
217
217
 
218
218
  # Unit operation
@@ -294,40 +294,40 @@ module Phys
294
294
  end
295
295
 
296
296
  def *(x)
297
- y = Unit.cast(x)
297
+ x = Unit.cast(x)
298
298
  if scalar?
299
- return y
300
- elsif y.scalar?
299
+ return x
300
+ elsif x.scalar?
301
301
  return self
302
302
  end
303
- check_operable2(y)
304
- dims = dimension_binop(y){|a,b| a+b}
305
- factor = self.factor * y.factor
303
+ check_operable2(x)
304
+ dims = dimension_binop(x){|a,b| a+b}
305
+ factor = self.factor * x.factor
306
306
  Unit.new(factor,dims)
307
307
  end
308
308
 
309
309
  def /(x)
310
- y = Unit.cast(x)
310
+ x = Unit.cast(x)
311
311
  if scalar?
312
- return y.inv
313
- elsif y.scalar?
312
+ return x.inv
313
+ elsif x.scalar?
314
314
  return self
315
315
  end
316
- check_operable2(y)
317
- dims = dimension_binop(y){|a,b| a-b}
318
- factor = self.factor / y.factor
316
+ check_operable2(x)
317
+ dims = dimension_binop(x){|a,b| a-b}
318
+ factor = self.factor / x.factor
319
319
  Unit.new(factor,dims)
320
320
  end
321
321
 
322
322
  def rdiv(x)
323
- y = Unit.cast(x)
323
+ x = Unit.cast(x)
324
324
  if scalar?
325
- return y.inv
326
- elsif y.scalar?
325
+ return x.inv
326
+ elsif x.scalar?
327
327
  return self
328
328
  end
329
- check_operable2(y)
330
- dims = dimension_binop(y){|a,b| a-b}
329
+ check_operable2(x)
330
+ dims = dimension_binop(x){|a,b| a-b}
331
331
  factor = Rational(self.factor,x.factor)
332
332
  Unit.new(factor,dims)
333
333
  end
@@ -342,6 +342,10 @@ module Phys
342
342
  Unit.new(Rational(1,self.factor), dims)
343
343
  end
344
344
 
345
+ def self.inv(x)
346
+ Unit.cast(x).inv
347
+ end
348
+
345
349
  def **(x)
346
350
  check_operable
347
351
  m = Utils.as_numeric(x)