comp.lang.ada
 help / color / mirror / Atom feed
From: "Björn Lundin" <b.f.lundin@gmail.com>
Subject: Fixed vs float and precision and conversions
Date: Tue, 7 Jul 2020 23:10:20 +0200	[thread overview]
Message-ID: <re2obs$jus$1@dont-email.me> (raw)


Hi !

I've for years run an interface towards extenal part on a raspberry pi
that communicates with JSON over http (JSONRPC2)

the versions are

bnl@pibetbot:~ $ gnatls -v

GNATLS 6.3.0
Copyright (C) 1997-2016, Free Software Foundation, Inc.
...

bnl@pibetbot:~ $ uname -a
Linux pibetbot 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l 
GNU/Linux
bnl@pibetbot:~ $ cat /etc/deb
debconf.conf    debian_version
bnl@pibetbot:~ $ cat /etc/deb
debconf.conf    debian_version
bnl@pibetbot:~ $ cat /etc/debian_version
9.4


I have found this reliable but suddenly I have got some rounding 
troubles. Or I perhaps just discovered it now.


I have a fixed type
   type Fixed_Type is delta 0.001 digits 18;

but JSON does not support that. So I get floats instead.


I use gnatcoll.json as parser by the way


   procedure Get_Value(Container: in    Json_Value;
                       Field    : in     String;
                       Target   : in out Fixed_Type;
                       Found    :    out Boolean ) is
     Tmp : Float := 0.0;
   begin
     if Container.Has_Field(Field) then
       Tmp := Container.Get(Field);
       Found := True;
       Target := Fixed_Type(Tmp);
     else
       Found := False;
     end if;
   end Get_Value;


The message (JSON) contains a value 5.10 (in a float), but that is 
converted (sometimes I think) to the fixed_type variable with value 
5.099. This gets me into trouble further down in the code.

So - What should I do instead?

should I express my Fixed_Type in another way?

I need to be able to express 6.5 % (0.065) which I could not with
type Fixed_Type is delta 0.01 digits 18;




-- 
Björn

             reply	other threads:[~2020-07-07 21:10 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-07 21:10 Björn Lundin [this message]
2020-07-07 21:30 ` Fixed vs float and precision and conversions Niklas Holsti
2020-07-08  8:17   ` Björn Lundin
2020-07-07 21:58 ` Shark8
2020-07-08  8:15   ` Björn Lundin
2020-07-08 16:16     ` Shark8
2020-07-08 18:08       ` Björn Lundin
2020-07-08 18:10         ` Björn Lundin
2020-07-08 18:21           ` Niklas Holsti
2020-07-08 19:39             ` Björn Lundin
2020-07-08 20:34               ` Niklas Holsti
2020-07-08 21:24                 ` Björn Lundin
2020-07-09  7:11                   ` Niklas Holsti
2020-07-08 18:36           ` Dmitry A. Kazakov
2020-07-08 19:41             ` Björn Lundin
2020-07-09  6:20               ` Dmitry A. Kazakov
2020-07-09  7:23                 ` Björn Lundin
2020-07-09  7:49                   ` Dmitry A. Kazakov
2020-07-08 21:16         ` Shark8
2020-07-08 21:47           ` Björn Lundin
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox