fixed_point 0.1.0 → 0.1.1

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.
data/HISTORY.md CHANGED
@@ -1,6 +1,11 @@
1
1
  HISTORY/Changelog
2
2
  =================
3
3
 
4
+ 0.1.1
5
+ -----
6
+
7
+ Depreciated .fraction method, use .frac instead
8
+
4
9
  0.1.0
5
10
  -----
6
11
 
data/README.md CHANGED
@@ -25,6 +25,36 @@ Checkout the examples folder, but here are a few:
25
25
  puts fix_num.to_h # Hexadecimal
26
26
  puts fix_num.to_b # Binary
27
27
 
28
+ Building tables:
29
+
30
+ require 'fixed_point'
31
+
32
+ #Signed 8 bit, (4 bit Integer, 4 bit fractional)
33
+ format = FixedPoint::Format.new(1,4,4)
34
+
35
+ table_for_conversion = [
36
+ 2.7505, 2.5, 2.25, 2, 0.5, 0, -0.5, -4.5
37
+ ]
38
+
39
+ table_for_conversion.each do |num|
40
+ fixt = FixedPoint::Number.new(num, format, '_')
41
+ puts "#{format.width}'b#{fixt.to_b} // Quantised %7.4f Source %7.4f" % [ fixt.to_f, fixt.source]
42
+ end
43
+
44
+ Returns:
45
+
46
+ 8'b0010_1100 // Quantised 2.7500 Source 2.7505
47
+ 8'b0010_1000 // Quantised 2.5000 Source 2.5000
48
+ 8'b0010_0100 // Quantised 2.2500 Source 2.2500
49
+ 8'b0010_0000 // Quantised 2.0000 Source 2.0000
50
+ 8'b0000_1000 // Quantised 0.5000 Source 0.5000
51
+ 8'b0000_0000 // Quantised 0.0000 Source 0.0000
52
+ 8'b1111_1000 // Quantised -0.5000 Source -0.5000
53
+ 8'b1011_1000 // Quantised -4.5000 Source -4.5000
54
+
55
+
56
+
57
+
28
58
  TODO
29
59
  ----
30
60
 
@@ -0,0 +1,46 @@
1
+
2
+ begin
3
+ require 'rubygems'
4
+ require 'fixed_point'
5
+ rescue
6
+ require_relative '../lib/fixed_point'
7
+ end
8
+
9
+
10
+ puts
11
+ puts 'Unsigned 4 bit Integer'
12
+
13
+ #Unsigned, 4 bit integer
14
+ format = FixedPoint::Format.new(0,4,0)
15
+
16
+ (0...16).each do |num|
17
+ fixt = FixedPoint::Number.new(num, format)
18
+ puts "#{format.width}'b#{fixt.to_b} // #{fixt.to_f} "
19
+ end
20
+
21
+
22
+
23
+ puts
24
+ puts 'Signed 8 bit (6 bit int, 2 bit frac)'
25
+
26
+ format = FixedPoint::Format.new(1,4,4)
27
+
28
+ table_for_conversion = [
29
+ 2.7505, 2.5, 2.25, 2, 0.5, 0, -0.5, -4.5
30
+ ]
31
+
32
+ table_for_conversion.each do |num|
33
+ fixt = FixedPoint::Number.new(num, format, '_')
34
+ puts "#{format.width}'b#{fixt.to_b} // Quantised #{fixt.to_f} Source #{fixt.source}"
35
+ end
36
+
37
+
38
+ puts
39
+ puts 'As above, in hex and better string formatting in comments'
40
+
41
+ ## NB "%min_length.frac_length" % float_number, min_length wil lpad with saces as required
42
+ table_for_conversion.each do |num|
43
+ fixt = FixedPoint::Number.new(num, format, '_')
44
+ puts "#{format.width}'h#{fixt.to_h} // Quantised %7.4f Source %7.4f" % [ fixt.to_f, fixt.source]
45
+ end
46
+
data/lib/fixed_point.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module FixedPoint
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
4
4
 
5
5
  begin
@@ -13,9 +13,6 @@ module FixedPoint
13
13
  ############################################
14
14
 
15
15
 
16
- ####################################
17
- ### Init
18
- ####################################
19
16
  def initialize(number, input_format=Format.new(1,12,20), decimal_mark=".")
20
17
  @source = number
21
18
  @format = input_format
@@ -28,12 +25,15 @@ module FixedPoint
28
25
  end
29
26
 
30
27
  ####################################
31
- ### Number overflow/underflow flags
28
+ ### Numerical overflow flag
32
29
  ####################################
33
30
  def overflow?
34
31
  @overflow
35
32
  end
36
33
 
34
+ ####################################
35
+ ### Numerical underflow flag
36
+ ####################################
37
37
  def underflow?
38
38
  @underflow
39
39
  end
@@ -41,64 +41,62 @@ module FixedPoint
41
41
  ####################################
42
42
  ### Methods to return number formats
43
43
  ####################################
44
+
45
+ # Alias for binary.
44
46
  def bin
45
47
  binary
46
48
  end
47
49
 
50
+ # Alias for hexadecimal.
48
51
  def hex
49
52
  hexadecimal
50
53
  end
51
54
 
52
- #To Binary form
55
+ # Alias for binary.
53
56
  def to_b
54
57
  binary
55
58
  end
56
59
 
57
- #To Hexadecimal form
60
+ # Alias for hexadecimal.
58
61
  def to_h
59
62
  hexadecimal
60
63
  end
61
64
 
62
- #To Floating Point form, quantised version of _source_
65
+ #Floating Point form of the quantised value.
63
66
  def to_f
64
67
  @quantised
65
68
  end
66
69
 
67
- #To Integer, limited integer part of _source_
70
+ #Integer, integer part of quantised value.
68
71
  def to_i
69
72
  @quantised.to_i
70
73
  end
71
74
 
72
- # Method returns fractional section of fixed point type
73
- # not a to_ method as it is not representative of the whole number
75
+ # Fractional section of quantised value.
74
76
  def frac
75
77
  (@quantised - to_i)
76
78
  end
77
79
 
78
- def fraction
79
- frac
80
- end
81
-
82
80
  ####################################
83
- ### Methods to calculate formats
81
+ ### Calculate Binary format
84
82
  ####################################
85
83
  def binary
86
84
  #Take signed quantised value and create binary string
87
- if (@quantised < 0) and fraction.nonzero?
85
+ if (@quantised < 0) and frac.nonzero?
88
86
  # Fractional numbers not negative
89
87
  # So the integer part is 1 less than other wise would be and add 1+frac
90
88
  ret_bin_int = (@format.max_int_unsigned + to_i )
91
- frac_value = 1 + fraction
89
+ frac_value = 1 + frac
92
90
  end
93
91
 
94
- if (@quantised < 0) and fraction.zero?
92
+ if (@quantised < 0) and frac.zero?
95
93
  ret_bin_int = (@format.max_int_unsigned + to_i + 1 )
96
- frac_value = fraction
94
+ frac_value = frac
97
95
  end
98
96
 
99
97
  if @quantised >= 0
100
98
  ret_bin_int = self.to_i
101
- frac_value = fraction
99
+ frac_value = frac
102
100
  end
103
101
 
104
102
  ## Convert to binary String and extend to correct length
@@ -118,6 +116,9 @@ module FixedPoint
118
116
  return binary_string
119
117
  end
120
118
 
119
+ ####################################
120
+ ### Calculate Hexadecimal format
121
+ ####################################
121
122
  def hexadecimal
122
123
  #Clean Binary code (remove _ - . etc)
123
124
  clean_binary = to_b.scan(/[01]/).join('')
@@ -185,8 +186,10 @@ module FixedPoint
185
186
  end
186
187
  end
187
188
 
188
- #def hex=( text )
189
- #end
189
+ def hex=( text )
190
+ puts "hex = Mehtod not completed"
191
+ ## Strip leading 0x if present
192
+ end
190
193
 
191
194
 
192
195
  #TODO
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fixed_point
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Morgan Prior
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-21 00:00:00 +00:00
18
+ date: 2012-01-22 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -32,6 +32,7 @@ files:
32
32
  - README.md
33
33
  - HISTORY.md
34
34
  - Rakefile
35
+ - examples/table_generation.rb
35
36
  - lib/fixed_point/fixdt.rb
36
37
  - lib/fixed_point/format.rb
37
38
  - lib/fixed_point/number.rb