Packages
protox
1.6.2
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-dev
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
retired
1.7.3
1.7.2
1.7.1
1.7.0
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.0
1.3.2
1.3.1
1.3.0
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.0
0.25.0
0.24.0
0.23.1
0.23.0
0.22.0
0.21.0
0.20.0
0.19.1
0.19.0
0.18.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.2
0.15.1
0.15.0
0.14.0
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.0
0.7.1
0.7.0
A fast, easy to use and 100% conformant Elixir library for Google Protocol Buffers (aka protobuf)
Current section
Files
Jump to
Current section
Files
lib/protox/float.ex
defmodule Protox.Float do
@moduledoc false
defmacro __using__(_) do
quote do
# IEEE 754-1985
#
# * 32 bits
# [0 - 22] -> fraction ( 23 bits )
# [23 - 30] -> exponent ( 8 bits )
# [31 - 31] -> sign ( 1 bit )
#
# * 64 bits
# [0 - 51] -> fraction ( 52 bits )
# [52 - 62] -> exponent ( 11 bits )
# [63 - 63] -> sign ( 1 bit )
#
# * Positive and negative infinity
# sign -> 0 for positive infinity, 1 for negative infinity.
# exponent -> all bits set to 1
# fraction -> all bits set to 0
#
# * NaN
# sign -> 0 or 1
# exponent -> all bits set to 1
# fraction -> anything except all bits set to 0
#
# * Protobuf uses little-endian
@positive_infinity_64 <<0, 0, 0, 0, 0, 0, 0xF0, 0x7F>>
@negative_infinity_64 <<0, 0, 0, 0, 0, 0, 0xF0, 0xFF>>
@nan_64 <<1::48, 0b1111::4, 1::4, 1::1, 0b1111111::7>>
@min_double Protox.Float.min_double()
@max_double Protox.Float.max_double()
@positive_infinity_32 <<0, 0, 0x80, 0x7F>>
@negative_infinity_32 <<0, 0, 0x80, 0xFF>>
@nan_32 <<1::16, 1::1, 1::7, 1::1, 0b1111111::7>>
@min_float Protox.Float.min_float()
@max_float Protox.Float.max_float()
end
end
def min_float() do
<<value::float-big-32>> = <<0b11111111011111111111111111111111::32>>
value
end
def max_float() do
<<value::float-big-32>> = <<0b01111111011111111111111111111111::32>>
value
end
def min_double() do
<<value::float-big-64>> =
<<0b1111111111101111111111111111111111111111111111111111111111111111::64>>
value
end
def max_double() do
<<value::float-big-64>> =
<<0b0111111111101111111111111111111111111111111111111111111111111111::64>>
value
end
end