blob: 5248725e16ea107dbcde320f9798e9820ec9029b [file] [log] [blame]
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.
-module(erlfdb_float).
-export([
decode/1,
encode/1
]).
decode(<<_Sign:1, 0:8, _Fraction:23>> = F) ->
{float, denormalized, F};
decode(<<_Sign:1, 255:8, 0:23>> = F) ->
{float, infinite, F};
decode(<<_Sign:1, 255:8, _Fraction:23>> = F) ->
{float, nan, F};
decode(<<F:32/float>>) ->
{float, F};
decode(<<_Sign:1, 0:11, _Fraction:52>> = D) ->
{double, denormalized, D};
decode(<<_Sign:1, 2047:11, 0:52>> = D) ->
{double, infinite, D};
decode(<<_Sign:1, 2047:11, _Fraction:52>> = D) ->
{double, nan, D};
decode(<<D:64/float>>) ->
D.
encode({float, F}) -> <<F:32/float>>;
encode({float, _Type, F}) -> F;
encode(F) when is_float(F) -> <<F:64/float>>;
encode({double, _Type, D}) -> D.