zsh-workers
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: <zsh-workers@zsh.org>
Subject: Re: Floating point modulus
Date: Sun, 11 Jan 2015 18:23:23 -0800	[thread overview]
Message-ID: <150111182323.ZM10282@torch.brasslantern.com> (raw)
In-Reply-To: <54B30F05.1090207@eastlink.ca>

On Jan 11,  4:02pm, Ray Andrews wrote:
} Subject: Re: Floating point modulus
}
} On 01/11/2015 12:25 PM, Peter Stephenson wrote:
} 
} > I'll leave that to you, but instead of an explicit rounding you could 
} > do basically the same calculation but assigned to a variable declared 
} > as an integer and output that.xs pws remainder=$1
} 
} Ignore this question if it can't be explained simply, since
} I don't have the knowledge probably to even understand the
} answer, but why is it more complicated

You're conflating two only loosely related things.  Above, Peter is
talking about the regression test shell code; you seem to be asking
about the C code change, which already works fine -- except that on
different hardware/OS platforms, different implementations of double-
precision arithmetic may cause the same floating-point operation to
return results that differ in the less-significant decimal places.

Since the tests rely on being able to (textually) compare an actual
result to an expected result, you can't test just any floating point
expression, you have to choose a floating point expression that will
be the same everywhere to however many decimal places.

} And:
} 
}   /* 25 */  BOOL|OP_A2IO, LR|OP_A2IO, RL|OP_OP, RL|OP_OP, RL|OP_E2,
} -/* 30 */  RL|OP_E2, RL|OP_E2, RL|OP_E2, RL|OP_E2, RL|OP_E2IO,
} 
} ... are those 'metas'?  IOW, is that the internal representation of
} some command syntax?   Metafied? Tokenized?  ...

There are two tables in math.c, one with symbolic names of all the
operators, and one with symbolic (represented as bitfield) binding and
precedence of those same operators.  The tables line up positionally.
Yes, this should probably have been done with structs instead of with
two parallel arrays, but this code was written by a college sophomore
in 1993 or so and barely changed since.

LR and RL are binding, OP_A2 and OP_E2 are assignment or expression
and the number of operands, and a suffix of IO means the operator is
"integer only".  This information is used by the math parser.  So my
patch removed the "integer only" bit from the map for % and %= and
changed the actual implemention to call fmod() for non-integers.  The
change is very small compared to the diff context produced.

-- 
Barton E. Schaefer


  reply	other threads:[~2015-01-12  2:23 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-09 12:43 PATCH: hist: remove wrong NULL terminator Mikael Magnusson
2015-01-09 17:45 ` Ray Andrews
2015-01-09 18:33   ` Lawrence Velázquez
2015-01-09 18:36     ` Lawrence Velázquez
2015-01-09 19:38   ` Mikael Magnusson
2015-01-09 21:39     ` Ray Andrews
2015-01-09 22:30       ` Peter Stephenson
2015-01-09 23:39         ` Ray Andrews
2015-01-10  0:39           ` Bart Schaefer
2015-01-10  7:45             ` Ray Andrews
2015-01-10 22:04               ` Lawrence Velázquez
2015-01-10 22:50                 ` Ray Andrews
2015-01-11  1:58                   ` Bart Schaefer
2015-01-11  5:46                     ` Ray Andrews
2015-01-11  7:10                       ` Floating point modulus Bart Schaefer
2015-01-11 17:33                         ` Peter Stephenson
2015-01-11 19:25                           ` Bart Schaefer
2015-01-11 19:25                         ` Ray Andrews
2015-01-11 20:00                           ` Bart Schaefer
2015-01-11 20:58                             ` Ray Andrews
2015-01-11 21:34                               ` Peter Stephenson
2015-01-12  0:18                                 ` Ray Andrews
2015-01-12 10:03                                   ` Peter Stephenson
2015-01-11 19:36                         ` Bart Schaefer
2015-01-11 20:01                           ` Peter Stephenson
2015-01-11 20:04                             ` Bart Schaefer
2015-01-11 20:25                               ` Peter Stephenson
2015-01-12  0:02                                 ` Ray Andrews
2015-01-12  2:23                                   ` Bart Schaefer [this message]
2015-01-12  2:46                                 ` Bart Schaefer
2015-01-12  9:56                                   ` Peter Stephenson
2015-01-12 13:49                                     ` Peter Stephenson
2015-01-12 16:35                                     ` Bart Schaefer
2015-01-12 16:45                                       ` Peter Stephenson
2015-01-12 11:36                           ` Vincent Lefevre
2015-01-10  7:08 ` PATCH: hist: remove wrong NULL terminator Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=150111182323.ZM10282@torch.brasslantern.com \
    --to=schaefer@brasslantern.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).