public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Chris Lattner <sabre@nondot.org>
To: <gcc@gcc.gnu.org>
Subject: RE: pure and const functions
Date: Fri, 26 Apr 2002 10:17:00 -0000	[thread overview]
Message-ID: <Pine.LNX.4.30.0204261145220.2837-100000@nondot.org> (raw)


> int fib(int n) {
>   if (n==0 || n==1) return n;
>   return fib(n-1) + fib(n-2);
> }

> According to the definitions given above, this function is const,
> but not total, because it does not return for negative n.

While this is true in a practical sense, given infinite resources, this is
certainly not the case.  Assuming you had a whole lot of stack space and
bunch of time, the negative values for 'n' would wrap around to positive
values.  Eventually it would get to 1 and terminate.

As this is the case, for this example...

int double_or_nothing (int n) {
  fib(n);
  return 2*n;
}

... it should be optimizable to:

int double_or_nothing (int n) {
  return 2*n;
}

...because on an ideal, theoretical, machine, they results are exactly the
same.

IOW: we don't try to predict stack overflow in other cases, so why should
     we have to worry about that possibility here?

There may be other cases where functions are "partial", can you give
another example?

-Chris

http://www.nondot.org/~sabre/os/
http://www.nondot.org/~sabre/Projects/

             reply	other threads:[~2002-04-26 16:53 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-04-26 10:17 Chris Lattner [this message]
2002-04-26 10:21 ` Kris Warkentin
2002-04-26 10:30   ` Chris Lattner
2002-04-26 10:34     ` Magnus Fromreide
2002-04-26 10:35       ` Chris Lattner
2002-04-26 10:59         ` Magnus Fromreide
2002-04-26 11:03           ` Chris Lattner
2002-04-26 11:27             ` Magnus Fromreide
2002-04-26 12:49           ` Russ Allbery
2002-04-26 10:36     ` Kris Warkentin
2002-04-26 10:46       ` Chris Lattner
2002-04-26 10:26 ` Tim Hollebeek
2002-04-26 10:30   ` Chris Lattner
2002-04-26 10:56     ` Tony Finch
2002-04-26 10:56     ` Zack Weinberg
2002-04-26 11:01       ` Chris Lattner
2002-08-30 23:02         ` Zack Weinberg
2002-04-26 12:11 ` Mark Mitchell
  -- strict thread matches above, loose matches on Subject: below --
2002-04-29 17:25 John Wehle
2002-04-29  9:29 Robert Dewar
2002-04-29  9:34 ` Chris Lattner
2002-04-29  8:30 Chris Lattner
2002-04-29  9:23 ` Daniel Berlin
2002-04-29  9:52   ` Chris Lattner
2002-04-29  9:58   ` Mark Dettinger
2002-04-29  8:30 Robert Dewar
2002-04-29  8:57 ` Chris Lattner
2002-04-29  5:18 Robert Dewar
2002-04-29  5:44 ` Mark Dettinger
2002-04-29  3:59 Mark Dettinger
2002-04-26  5:16 Mark Dettinger
2002-04-26 11:20 ` Joseph S. Myers
2002-04-26 12:59 ` Jakub Jelinek

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=Pine.LNX.4.30.0204261145220.2837-100000@nondot.org \
    --to=sabre@nondot.org \
    --cc=gcc@gcc.gnu.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.
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 read-only IMAP folder(s) and NNTP newsgroup(s).