Semantics of ^^
Phil Deets
pjdeets2 at gmail.com
Tue Dec 8 13:44:46 PST 2009
On Tue, 08 Dec 2009 12:42:33 -0500, Bill Baxter <wbaxter at gmail.com> wrote:
> On Tue, Dec 8, 2009 at 2:32 AM, Don <nospam at nospam.com> wrote:
> [snip]
>> * If both x and y are integers, and y > 0, x^^y is equivalent to
>> { auto u = x; foreach(i; 1..y) { u *= x; } return u; }
>> * If both x and y are integers, and y < 0, an integer divide error
>> occurs,
>> regardless of the value of x. This error is detected at compile time, if
>> possible.
>
> Can you explain why you think that's necessary? Seems like going too
> far towards a nanny compiler for no particularly good reason.
>
> The fact that 2^^-1 isn't particularly useful doesn't make it
> particularly error prone. No more so than integer division when the
> person meant floating point division. I just find it unexpected that
> a language would single out exponentiation for this kind of treatment.
>
I was also wondering about this. If it can't be detected at compile time,
is the result 0?
>> [snip]
>> (1) Although the following special cases could be defined...
>> * If x == 1, x ^^ y is 1
>> * If x == -1 and y is even, x^^y == 1
>> * If x == -1 and y is odd, x^^y == -1
>> ... they are not sufficiently useful to justify the major increase in
>> complexity which they introduce.
>
> Hmm, I'm not so sure about that. I saw examples of this being used
> even in the small sampling of search results from Python and Fortran
> code that I looked at. Many mathematical constructs are defined as
> having a leading sign of (-1)^^n (like the sin series formula linked
> above).
> [snip]
I think n is always non-negative in the trig series, but some Laurent
series use negative n values. So (-1)^^n might be useful for negative n,
but you could always rewrite it as (n%2 ? -1 : 1) or ~(n&1)+1.
More information about the Digitalmars-d
mailing list