<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 3/17/19 3:40 AM, Richard O'Keefe
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CABcYAd+UzDciUoNrWiZp53aXV+XzL9mu98sXY5RyTQRO9B1tNA@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div dir="ltr">
          <div class="gmail_default"
            style="font-family:monospace,monospace">Me, I'd have taken
            Cowlishaw's reference implementation in C or the</div>
          <div class="gmail_default"
            style="font-family:monospace,monospace">Intel library <a
href="https://software.intel.com/en-us/articles/intel-decimal-floating-point-math-library"
              moz-do-not-send="true">https://software.intel.com/en-us/articles/intel-decimal-floating-point-math-library</a>
            and wrapped a NIF around it.</div>
        </div>
      </div>
    </blockquote>
    <p><br>
    </p>
    <p> Interesting. I'll dive deeper into that for sure.<br>
    </p>
    <p><br>
    </p>
    <blockquote type="cite"
cite="mid:CABcYAd+UzDciUoNrWiZp53aXV+XzL9mu98sXY5RyTQRO9B1tNA@mail.gmail.com">
      <div dir="ltr">
        <div dir="ltr">
          <div class="gmail_default"
            style="font-family:monospace,monospace"><br>
          </div>
          <div class="gmail_default"
            style="font-family:monospace,monospace">If I needed it. 
            z/Series and POWER have decimal FP in their</div>
          <div class="gmail_default"
            style="font-family:monospace,monospace">instruction sets,
            but on other machines it's emulation or nothing.</div>
          <div class="gmail_default"
            style="font-family:monospace,monospace"><br>
          </div>
          <div class="gmail_default"
            style="font-family:monospace,monospace">Erlang/OTP is very
            much influenced by its users' needs.</div>
          <div class="gmail_default"
            style="font-family:monospace,monospace">(It doesn't always
            move *fast*, you understand, but when you</div>
          <div class="gmail_default"
            style="font-family:monospace,monospace">want to develop
            long-lived systems that can be a good thing.)<br>
          </div>
        </div>
      </div>
    </blockquote>
    <p> I agree :) 100% <br>
    </p>
    <p><br>
    </p>
    <blockquote type="cite"
cite="mid:CABcYAd+UzDciUoNrWiZp53aXV+XzL9mu98sXY5RyTQRO9B1tNA@mail.gmail.com">
      <div dir="ltr">
        <div dir="ltr">
          <div class="gmail_default"
            style="font-family:monospace,monospace">Why not write up an
            EEP?</div>
        </div>
      </div>
    </blockquote>
    <p> Maybe ;) I think there are a few others in the community who are
      better suited for such a thing, but we shall see! <br>
    </p>
    <p><br>
    </p>
    <p>Thanks RoK! <br>
    </p>
    <p><br>
    </p>
    <p>--</p>
    <p>Bryan<br>
    </p>
    <p><br>
    </p>
    <blockquote type="cite"
cite="mid:CABcYAd+UzDciUoNrWiZp53aXV+XzL9mu98sXY5RyTQRO9B1tNA@mail.gmail.com">
      <div dir="ltr">
        <div dir="ltr">
          <div class="gmail_default"
            style="font-family:monospace,monospace"><br>
          </div>
          <div class="gmail_default"
            style="font-family:monospace,monospace"><br>
          </div>
          <div class="gmail_default"
            style="font-family:monospace,monospace"><br>
          </div>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Sun, 17 Mar 2019 at 21:18,
          Bryan Paxton <<a href="mailto:starbelly@pobox.com"
            moz-do-not-send="true">starbelly@pobox.com</a>> wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px
          0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div bgcolor="#FFFFFF">
            <p>A library that implements IEEE-754:  <a
                class="gmail-m_-7290200277344277770moz-txt-link-freetext"
                href="http://speleotrove.com/decimal/" target="_blank"
                moz-do-not-send="true">http://speleotrove.com/decimal/</a>
            </p>
            <p>Example implementations in Erlang:<br>
            </p>
            <p><a
                class="gmail-m_-7290200277344277770moz-txt-link-freetext"
                href="https://github.com/tim/erlang-decimal"
                target="_blank" moz-do-not-send="true">https://github.com/tim/erlang-decimal</a><br>
            </p>
            <p><a
                class="gmail-m_-7290200277344277770moz-txt-link-freetext"
                href="https://github.com/egobrain/decimal"
                target="_blank" moz-do-not-send="true">https://github.com/egobrain/decimal</a></p>
            <p><br>
            </p>
            <div class="gmail-m_-7290200277344277770moz-cite-prefix">On
              3/17/19 1:29 AM, Richard O'Keefe wrote:<br>
            </div>
            <blockquote type="cite">
              <div dir="ltr">
                <div class="gmail_default"
                  style="font-family:monospace,monospace">What do you
                  mean by "a decimal lib"?<br>
                </div>
              </div>
              <br>
              <div class="gmail_quote">
                <div dir="ltr" class="gmail_attr">On Sun, 17 Mar 2019 at
                  06:35, Bryan Paxton <<a
                    href="mailto:starbelly@pobox.com" target="_blank"
                    moz-do-not-send="true">starbelly@pobox.com</a>>
                  wrote:<br>
                </div>
                <blockquote class="gmail_quote" style="margin:0px 0px
                  0px 0.8ex;border-left:1px solid
                  rgb(204,204,204);padding-left:1ex">
                  <div bgcolor="#FFFFFF">
                    <p> All of this begs the question of why there is no
                      decimal lib in otp... I'm sure there's a good
                      reason... ?</p>
                    <p><br>
                    </p>
                    <div
class="gmail-m_-7290200277344277770gmail-m_555742592463524003moz-cite-prefix">On
                      3/16/19 12:31 PM, Bob Ippolito wrote:<br>
                    </div>
                    <blockquote type="cite">
                      <div dir="ltr">While it's more code, the most
                        straightforward way would be to parse the whole
                        float for that spec into its constituent parts
                        and reassemble (with defaults where necessary)
                        to parse with float_to_list.
                        <div><br>
                        </div>
                        <div>
                          <div><br>
                          </div>
                          <div><br>
                          </div>
                        </div>
                      </div>
                      <br>
                      <div class="gmail_quote">
                        <div dir="ltr" class="gmail_attr">On Sat, Mar
                          16, 2019 at 4:32 AM Hugo Mills <<a
                            href="mailto:hugo@carfax.org.uk"
                            target="_blank" moz-do-not-send="true">hugo@carfax.org.uk</a>>
                          wrote:<br>
                        </div>
                        <blockquote class="gmail_quote"
                          style="margin:0px 0px 0px
                          0.8ex;border-left:1px solid
                          rgb(204,204,204);padding-left:1ex">   Hi, Bob,<br>
                          <br>
                          On Fri, Mar 15, 2019 at 05:32:54PM -0700, Bob
                          Ippolito wrote:<br>
                          > If you dive into the implementation it's
                          effectively a wrapper around<br>
                          > strtod from C with a validation pass that
                          is more strict than the strtod<br>
                          > standard.<br>
                          > <br>
                          > <a
href="https://github.com/erlang/otp/blob/OTP-21.3/erts/emulator/sys/win32/sys_float.c#L54"
                            rel="noreferrer" target="_blank"
                            moz-do-not-send="true">https://github.com/erlang/otp/blob/OTP-21.3/erts/emulator/sys/win32/sys_float.c#L54</a><br>
                          > <a
href="https://github.com/erlang/otp/blob/OTP-21.3/erts/emulator/sys/unix/sys_float.c#L732"
                            rel="noreferrer" target="_blank"
                            moz-do-not-send="true">https://github.com/erlang/otp/blob/OTP-21.3/erts/emulator/sys/unix/sys_float.c#L732</a><br>
                          > <br>
                          > So as far as a regex goes it would be
                          something like this:<br>
                          > <br>
                          > [+-]?\d+[.,]\d+([eE][+-]?\d+)<br>
                          > <br>
                          > The major differences between this and
                          other popular float grammars are:<br>
                          > <br>
                          > * At least one digit is required in each
                          part<br>
                          > * Both integer and fractional parts are
                          required, even if there's an<br>
                          > exponent part (so "1", ".1", "1e-1" would
                          not be valid)<br>
                          > * The decimal separator is either , or .
                          (the implementation will try the<br>
                          > other if necessary to compensate for a
                          different locale)<br>
                          <br>
                             Thanks for the confirmation. That's more or
                          less what I discovered<br>
                          while playing around with list_to_float. It's
                          the first two cases that<br>
                          are the problems for me, because the spec I'm
                          working to(*) says that<br>
                          "1." and ".3" are valid floats, for example,
                          as is "1e-1".<br>
                          <br>
                             Just for the record, here's the code I'm
                          using to convert a Turtle<br>
                          double or decimal (the former in scientific
                          notation; the latter<br>
                          without the E) into a form suitable for
                          list_to_float/1:<br>
                          <br>
                              [...]<br>
                              % W3C's description of a float is wider
                          than erlang's. We need to<br>
                              % split up the number into a few parts to
                          add extra characters<br>
                              % where necessary so that list_to_float/1
                          will work right.<br>
                              F = case string:lexemes(Text, "eE") of<br>
                                  [M, E] -><br>
                                      fixup_decimal(M) ++ "e" ++ E;<br>
                                  [M] -><br>
                                      fixup_decimal(M)<br>
                              end,<br>
                              O =
                          lagra_model:new_literal(list_to_float(F)),<br>
                              [...]<br>
                          <br>
                          -spec fixup_decimal(string()) -> string().<br>
                          fixup_decimal(M) -><br>
                              case string:lexemes(M, ".") of<br>
                                  [I] -><br>
                                      I++".0";<br>
                                  [I, ""] -><br>
                                      I++".0";<br>
                                  ["", J] -><br>
                                      "0."++J;<br>
                                  [I, J] -><br>
                                      M<br>
                              end.<br>
                          <br>
                             Hugo.<br>
                          <br>
                          (*) W3C's Turtle recommendation.<br>
                          <br>
                          <br>
                          > On Fri, Mar 15, 2019 at 3:52 PM Hugo
                          Mills <<a href="mailto:hugo@carfax.org.uk"
                            target="_blank" moz-do-not-send="true">hugo@carfax.org.uk</a>>
                          wrote:<br>
                          > <br>
                          > >    Where in the manual is the set of
                          allowable string representations<br>
                          > > of floating point numbers
                          documented? I'd have expected it to be here:<br>
                          > ><br>
                          > > <a
                            href="http://erlang.org/doc/reference_manual/data_types.html"
                            rel="noreferrer" target="_blank"
                            moz-do-not-send="true">http://erlang.org/doc/reference_manual/data_types.html</a><br>
                          > ><br>
                          > > ... but apparently not.<br>
                          > ><br>
                          > >    Specifically, I'm trying to use
                          list_to_float/1, and I've been<br>
                          > > trying to reverse engineer it:<br>
                          > ><br>
                          > > 1> list_to_float("-1").<br>
                          > > ** exception error: bad argument<br>
                          > >      in function  list_to_float/1<br>
                          > >         called as
                          list_to_float("-1")<br>
                          > > 2> list_to_float("-1.0").<br>
                          > > -1.0<br>
                          > > 3> list_to_float("-1.0e-23").<br>
                          > > -1.0e-23<br>
                          > > 4> list_to_float("-1e-23").<br>
                          > > ** exception error: bad argument<br>
                          > >      in function  list_to_float/1<br>
                          > >         called as
                          list_to_float("-1e-23")<br>
                          > > 5> list_to_float(".3").<br>
                          > > ** exception error: bad argument<br>
                          > >      in function  list_to_float/1<br>
                          > >         called as
                          list_to_float(".3")<br>
                          > ><br>
                          > >    An actual written specification
                          would be really handy here. Even<br>
                          > > just a regex or EBNF for them. I'm
                          writing a parser for something<br>
                          > > where the definition of floating
                          point literals isn't quite the same<br>
                          > > as Erlang's, and it's a bit painful.<br>
                          > ><br>
                          > >    Hugo.<br>
                          > ><br>
                          <br>
                          -- <br>
                          Hugo Mills             | Nostalgia isn't what
                          it used to be.<br>
                          hugo@... <a href="http://carfax.org.uk"
                            rel="noreferrer" target="_blank"
                            moz-do-not-send="true">carfax.org.uk</a> |<br>
                          <a href="http://carfax.org.uk/"
                            rel="noreferrer" target="_blank"
                            moz-do-not-send="true">http://carfax.org.uk/</a> 
                          |<br>
                          PGP: E2AB1DE4          |<br>
                          -----BEGIN PGP SIGNATURE-----<br>
                          Version: GnuPG v1.4.12 (GNU/Linux)<br>
                          <br>
iQIcBAEBAgAGBQJcjN62AAoJEFheFHXiqx3kiPAP/3V2SC+mFVSIjRw0moQC6keJ<br>
x8A+005H7+SO030G5/a0TYXEe9wxn1KEtQEEyG2yt6A1XASeERRFuAPeeFMEhti+<br>
trr1oYJmbSTUgvRs1i5jhSH7KmUEt09I+JgS3u0Xs92LkmNyfFde8K3z6uA1XKwp<br>
7tIHihrXYpk/jMamWXTNGYPlHtxcVxAToNK8ajQTz6dElurZYdHwHtnFv7Ya7jcf<br>
7w9fKG4XcIoQZHMBrnZF8g2UQIgWiMpz7eo5lko91Zbjetgv1qkKaiNonA+rai4b<br>
CVIXJ+YIT1dHNEQ76uVqJQuuklUB0M5B+FCX/zuS5Zd7mta9ljzBHefGLzQYT+EE<br>
Y4En5n+YvL5OUCqw0EBBXBTYcsdn8rP0+jSy3nFiX6zV4Ty49NrKCSN0LGQJVpkz<br>
wv1Sl05QBC2JcyCYqrCoMdudPNdcgK/TvB+H7KYcZDy3mgoZJ55U12Ys6Ng80tIa<br>
3eUis3W4vZLdS9Gfn8GY4A42APvv6X3W9bVN5JEISUlF3CdKui/RItZiQ8whx4iF<br>
6E+KzkO6AgmgyGKbAXK5N8S0MWuNT3g/V/tm7siY3GDG6cDIQNZRxevMXhAZ9nIv<br>
S3kAiz1JBUKIMWv3RCz77+gKPI7AiUBHlfmXsjudSbnJ9r6nxhbCjbbypmHOzZYx<br>
                          5uMAhklJZ0OnQgmxOfVU<br>
                          =0Eaq<br>
                          -----END PGP SIGNATURE-----<br>
                        </blockquote>
                      </div>
                      <br>
                      <fieldset
class="gmail-m_-7290200277344277770gmail-m_555742592463524003mimeAttachmentHeader"></fieldset>
                      <pre class="gmail-m_-7290200277344277770gmail-m_555742592463524003moz-quote-pre">_______________________________________________
erlang-questions mailing list
<a class="gmail-m_-7290200277344277770gmail-m_555742592463524003moz-txt-link-abbreviated" href="mailto:erlang-questions@erlang.org" target="_blank" moz-do-not-send="true">erlang-questions@erlang.org</a>
<a class="gmail-m_-7290200277344277770gmail-m_555742592463524003moz-txt-link-freetext" href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank" moz-do-not-send="true">http://erlang.org/mailman/listinfo/erlang-questions</a></pre>
                    </blockquote>
                    <p><br>
                    </p>
                    <p>--</p>
                    <p>Bryan Paxton<br>
                    </p>
                    <blockquote type="cite"> </blockquote>
                  </div>
                  _______________________________________________<br>
                  erlang-questions mailing list<br>
                  <a href="mailto:erlang-questions@erlang.org"
                    target="_blank" moz-do-not-send="true">erlang-questions@erlang.org</a><br>
                  <a
                    href="http://erlang.org/mailman/listinfo/erlang-questions"
                    rel="noreferrer" target="_blank"
                    moz-do-not-send="true">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
                </blockquote>
              </div>
            </blockquote>
          </div>
        </blockquote>
      </div>
    </blockquote>
  </body>
</html>