kgl 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4bc114cb34920ec7950a6874a45e45cc62ffcc6451adeb30382ed64d892b265c
4
- data.tar.gz: e06a04ee09a85dec8c6a68c08cf226955f1ed0d73f4bcb59d9cf64634a824481
3
+ metadata.gz: 6a7096ca78114cdf718f0c28ebea651c3883beb97e661fac637797ed97320713
4
+ data.tar.gz: 913f01ff7a69aa1b7ce27ae4e1bcc6670b30aabd9711b78fa61b2fd66d4317e7
5
5
  SHA512:
6
- metadata.gz: 919d930965c4975a63f0421195eaa0b1125b0f6e3142cca2fc2c4b077353876076dc82d5c4858be623235f4a8d06fb4dfeef034f0ee70c83e87341134ce2ea4f
7
- data.tar.gz: e72edc905d3658ab0b90993c5f8a868579b1aa8e6790db2ca711ae41f7ff21d6263f1f904018230be715b303e10a5eebbf4c3621fd0e826ed380aa64b5e831f1
6
+ metadata.gz: 5ed96a95a203a6509d2c2a198b39c441e7704fee12e20eb9e7686b423f5824a8738cfefdc73e37acc88b42e81f297eb93151cf0f9cc6c198d513d7cb54ca8533
7
+ data.tar.gz: 6d88af36b4a74a21f91711bc3a1ff1ec11b09cc1f59ce6c649bf293032bc7b1073caabefa8f7ecf31ccc71c74b5529b825fff3519c758584ab320803743d58df
data/CHANGELOG.md CHANGED
@@ -1,10 +1,16 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.0.5 2026/04/12
4
+ - `Float#to_r` and `Float#to_r_exact` raise `FloatDomainError` when `self` is not finite.
5
+
6
+ ## 0.0.4 2026/04/02
7
+ - Add `Float#to_r_exact` that returns exact Rational value expressed by `self`.
8
+
3
9
  ## 0.0.3 2024/12/03
4
- - Add Kgl.#rpw.
10
+ - Add `Kgl.#rpw`.
5
11
 
6
12
  ## 0.0.2 2020/04/23
7
- - Change default value of the Integer#to_msm's argument to 59.94.
13
+ - Change default value of the `Integer#to_msm`'s argument to `59.94`.
8
14
 
9
15
  ## 0.0.1 2019/08/31
10
16
  - First release.
data/README.md CHANGED
@@ -28,6 +28,10 @@ Returns the logarithm of `anti_logarithm` to base 2.
28
28
  ### `Float#to_r`, `String#to_r`
29
29
  Returns `Rational` value of `self`.
30
30
 
31
+ ### `Float#to_r_exact`
32
+ Returns exact `Rational` value of `self`, that may not be desirable for usual usage.
33
+ For instance, (0.1).to_r_exact returns (3602879701896397/36028797018963968) while (0.1).to_r returns (1/10).
34
+
31
35
  ### `Integer#to_msm(fps=59.94)`
32
36
  Returns `"[minutes]:[seconds].[milliseconds]"` which corresponds to `self` frames.
33
37
  The submilliseconds will be rounded. `fps` is frames per second.
data/lib/kgl/kmath.rb CHANGED
@@ -15,28 +15,42 @@ end
15
15
 
16
16
  class Float
17
17
  def to_r
18
- str=self.to_s
19
- (decimal,power)=str.split(/e/)
20
- (integer,decimal)=decimal.split(/\./)
21
- length=decimal.length
22
- numerator=integer.to_i*10**length+decimal.to_i
23
- denominator=10**length
24
- power=power.to_i
25
- if power>0
26
- numerator*=10**power
18
+ unless self.finite?
19
+ raise FloatDomainError
20
+ end
21
+ str = self.to_s
22
+ (decimal, power) = str.split(/e/)
23
+ (integer, decimal) = decimal.split(/\./)
24
+ length = decimal.length
25
+ numerator = integer.to_i*10**length+decimal.to_i
26
+ denominator = 10**length
27
+ power = power.to_i
28
+ if power > 0
29
+ numerator *= 10**power
30
+ else
31
+ denominator *= 10**(-power)
32
+ end
33
+ return Rational(numerator, denominator)
34
+ end
35
+ def to_r_exact
36
+ unless self.finite?
37
+ raise FloatDomainError
38
+ end
39
+ s, e = Math.frexp(self)
40
+ if e < 53
41
+ Rational(Math.ldexp(s, 53).to_i, 1<<(53-e))
27
42
  else
28
- denominator*=10**(-power)
43
+ Rational(self.to_i, 1)
29
44
  end
30
- return Rational(numerator,denominator)
31
45
  end
32
46
  end
33
47
  class String
34
48
  def to_r
35
- (numerator,denominator)=self.split(/\//)
49
+ (numerator, denominator) = self.split(/\//)
36
50
  if self.match(/\.|e/)
37
- return numerator.to_f.to_r/denominator.to_f.to_r
51
+ return numerator.to_f.to_r / denominator.to_f.to_r
38
52
  else
39
- return Rational(numerator.to_i,denominator.to_i)
53
+ return Rational(numerator.to_i, denominator.to_i)
40
54
  end
41
55
  end
42
56
  end
data/lib/kgl/suu.rb CHANGED
@@ -1,4 +1,4 @@
1
- # 整数を日本語等で表した時の文字列(self<0ならnil)を返すメソッド Integer#express を提供する。
1
+ # 整数を日本語等で表した時の文字列(self<0ならRangeError)を返すメソッド Integer#express を提供する。
2
2
  # 補助的に使用する定数や関数は Integer::SuuConstantsAndSubFunctions モジュールで定義されている。
3
3
  # Integer クラスでこのモジュールを include している。
4
4
  # 第一引数 lang には文字列を与える。
@@ -8,20 +8,20 @@
8
8
  # ただの Integer#to_s 。
9
9
  # f: 浮動小数点数
10
10
  # 第二引数 acc を使用する。
11
- # ほぼ "%1.#{acc-1}e" % self.to_f と同じだが,Floatの範囲外の大きな整数でも使える。
11
+ # ほぼ "%1.#{acc-1}e" % self.to_f と同じだが,Float の範囲外の大きな整数でも使える。
12
12
  # acc が1未満の場合は ArgumentError を発生。
13
13
  # j: 日本語
14
14
  # 一般に用いられる万進法による中数である。極以上を万万進とすることや,無量大数を分けることはしない。
15
15
  # 千~においては省略しないこともままあるが,ここでは十,百,千~の位が1のとき一の文字を省略する。
16
16
  # 千無量大数の十倍以上の数は表わせないので RangeError を発生。
17
- # 参考:無量大数の彼方へ(http://www.sf.airnet.ne.jp/ts/language/largenumber.html)
17
+ # 参考:無量大数の彼方へ (http://www.sf.airnet.ne.jp/ts/language/largenumber.html)
18
18
  # m: 中数(万万進)。
19
19
  # 日本語のように十,百,千~の位が1のとき一の文字を省略するのか定かでないが,ここでは省略しないことにした。
20
20
  # 一千万無量大数の十倍以上の数は表わせないので RangeError を発生。
21
- # 参考:無量大数の彼方へ(http://www.sf.airnet.ne.jp/ts/language/largenumber.html)
21
+ # 参考:無量大数の彼方へ (http://www.sf.airnet.ne.jp/ts/language/largenumber.html)
22
22
  # a: 英語(アメリカ式)
23
23
  # b: 英語(ヨーロッパ式)
24
- # 参考:Name of a Number(http://isthe.com/chongo/tech/math/number/number.html)
24
+ # 参考:Name of a Number (http://isthe.com/chongo/tech/math/number/number.html)
25
25
  class Integer
26
26
  module SuuConstantsAndSubFunctions
27
27
  Ichi = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'].freeze
data/lib/kgl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kgl
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.5'
3
3
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kgl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - KAZOON
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-12-03 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -52,7 +51,6 @@ dependencies:
52
51
  - - ">="
53
52
  - !ruby/object:Gem::Version
54
53
  version: 0.12.2
55
- description:
56
54
  email:
57
55
  - cycloawaodorin+gem@gmail.com
58
56
  executables: []
@@ -81,7 +79,6 @@ metadata:
81
79
  homepage_uri: https://github.com/cycloawaodorin/
82
80
  source_code_uri: https://github.com/cycloawaodorin/kgl
83
81
  changelog_uri: https://github.com/cycloawaodorin/kgl/blob/master/CHANGELOG.md
84
- post_install_message:
85
82
  rdoc_options: []
86
83
  require_paths:
87
84
  - lib
@@ -96,8 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
93
  - !ruby/object:Gem::Version
97
94
  version: '0'
98
95
  requirements: []
99
- rubygems_version: 3.5.23
100
- signing_key:
96
+ rubygems_version: 4.0.10
101
97
  specification_version: 4
102
98
  summary: A gem for personal use.
103
99
  test_files: []