## [squeak-dev] Floats

Alan Pinch alan.c.pinch at gmail.com
Thu Oct 12 09:59:06 UTC 2017

```Here is the spec they are referencing in this thread:
https://stackoverflow.com/questions/4975005/how-should-i-interpret-the-asn-1-ber-standard-for-reals

https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#%5B%7B%22num%22%3A41%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22FitH%22%7D%2C519%5D

On 10/12/2017 05:36 AM, Alan Pinch wrote:
>
> The same issue exists in ASN1 support, none for float type tag 9. I
> would love to add this support but I am unsure how to breakdown a
> float into mantissa, base and exponent. Here is a description of how
> ASN1 formats a REAL into the stream of bytes:
>
>     Type REAL takes values that are the machine representation of a
>     real number, namely the triplet (m, b, e), where m is the mantissa
>     (a signed number), b the base (2 or 10), and e the exponent (a
>     signed number). For example, the representation of the value 3.14
>     for the variable Pi, declared as Pi ::= REAL, can be (314, 10,
>     -2). Three special values, PLUS-INFINITY, 0, and MINUS-INFINITY,
>     are also allowed.
>
> Here are some sample values:
>
>       * 09 00 = 0 (zero)
>       * 09 01 40 = +INF (infinity)
>       * 09 01 41 = -INF
>       * 09 08 03 2b 31 2e 30 65 2b 30 = "+1.0e+0" = 1.0 (exact decimal)
>       * 09 05 80 fe 55 55 55 = 1398101.25 (binary, 0x555555 * 2^-2)
>       * 09 06 83 00 fc 00 00 01 = 0.0625 (binary, 0x000001 * 2^-4)
>
> I have not parsed out these samples into these components so it's greek.
>
> Alan
>
> On 10/11/2017 02:18 PM, Bert Freudenberg wrote:
>> On Wed, Oct 11, 2017 at 8:07 PM, Tobias Pape <Das.Linux at gmx.de
>> <mailto:Das.Linux at gmx.de>>wrote:
>>
>>
>>     > On 11.10.2017, at 19:59, Bert Freudenberg <bert at freudenbergs.de
>>     <mailto:bert at freudenbergs.de>> wrote:
>>     >
>>     > On Wed, Oct 11, 2017 at 5:24 PM, Tobias Pape <Das.Linux at gmx.de
>>     <mailto:Das.Linux at gmx.de>> wrote:
>>     > Hi all
>>     >
>>     > I'm a bit stumped…
>>     >
>>     > What is our canonical way to put a Float onto a (binary) stream?
>>     > To be precise a IEEE754 double precision 64-bit float onto a
>>     stream, of which I only know that it is a binary one.
>>     >
>>     > I found ByteArray>>doubleAt:{put:}bigEndian:, but they have
>>     neither senders nor test _and_ it is not a stream.
>>     >
>>     > What do y'all use?
>>     >
>>     > You write them as two words, like e.g. in DataStream>>writeFloat:.
>>
>>     Quite. yes.
>>
>>     But I find it strange that our read/write streams support various
>>     integer and string reading/writing helpers, but none for floats…
>>
>>     Best regards
>>     -Tobias
>>
>>
>> ​I guess file formats using integers and strings are way more common
>> than ones storing binary floats.
>>
>> - Bert -​
>>
>>
>
> --
> Thank you for your consideration,
> Alan

--