digitalmars.D - Contract example suggestion
- Serge Ratke (16/16) Nov 15 2004 Hi guys,
- Sjoerd van Leent (4/24) Nov 15 2004 Yup, else it does something completely insane.
- Thomas Kuehne (6/23) Nov 15 2004 so you are saying:
- Regan Heath (11/28) Nov 15 2004 No, I think it's correct, using an example:
- Sjoerd van Leent (4/39) Nov 16 2004 Ah I did mistake sqrt (A square root) with a power.
- Ben Hinkle (3/21) Nov 15 2004 try plugging in some example values. For example take x = 4. then result...
-
Serge Ratke
(5/5)
Nov 16 2004
In article
, Ben Hinkle says... - Russ Lewis (5/23) Nov 16 2004 As has been noted, the general idea of this contract is correct.
- Simon Buchan (7/30) Nov 17 2004 I'm assuming he meant double/real instead of long. (possibly from C's lo...
- Russ Lewis (4/17) Nov 17 2004 Well, if they were floats, then it would stil be broken, because of
Hi guys, i'm pretty new to D (wrote a simple Hello World), but ... shouldn't the out assert be more like (x * x) == result? long square_root(long x) in { assert(x >= 0); } out (result) { assert((result * result) == x); } body { return math.sqrt(x); }
Nov 15 2004
Serge Ratke wrote:Hi guys, i'm pretty new to D (wrote a simple Hello World), but ... shouldn't the out assert be more like (x * x) == result? long square_root(long x) in { assert(x >= 0); } out (result) { assert((result * result) == x); } body { return math.sqrt(x); }Yup, else it does something completely insane. Regards, Sjoerd
Nov 15 2004
Sjoerd van Leent schrieb am 2004-11-15:so you are saying: 1) result := sqrt(x) 2) result == x * x mhhhh... the only non-complex solution would be 0? Thomasi'm pretty new to D (wrote a simple Hello World), but ... shouldn't the out assert be more like (x * x) == result? long square_root(long x) in { assert(x >= 0); } out (result) { assert((result * result) == x); } body { return math.sqrt(x); }Yup, else it does something completely insane.
Nov 15 2004
On Mon, 15 Nov 2004 21:43:41 +0000 (UTC), Serge Ratke <Serge_member pathlink.com> wrote:Hi guys, i'm pretty new to D (wrote a simple Hello World), but ... shouldn't the out assert be more like (x * x) == result? long square_root(long x) in { assert(x >= 0); } out (result) { assert((result * result) == x); } body { return math.sqrt(x); }No, I think it's correct, using an example: square_root(25); if x == 25; then result == 5; therefore 5*5 == 25 or result*result == x Regan -- Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
Nov 15 2004
Regan Heath wrote:On Mon, 15 Nov 2004 21:43:41 +0000 (UTC), Serge Ratke <Serge_member pathlink.com> wrote:Ah I did mistake sqrt (A square root) with a power. My mistake, SjoerdHi guys, i'm pretty new to D (wrote a simple Hello World), but ... shouldn't the out assert be more like (x * x) == result? long square_root(long x) in { assert(x >= 0); } out (result) { assert((result * result) == x); } body { return math.sqrt(x); }No, I think it's correct, using an example: square_root(25); if x == 25; then result == 5; therefore 5*5 == 25 or result*result == x Regan
Nov 16 2004
Serge Ratke wrote:Hi guys, i'm pretty new to D (wrote a simple Hello World), but ... shouldn't the out assert be more like (x * x) == result? long square_root(long x) in { assert(x >= 0); } out (result) { assert((result * result) == x); } body { return math.sqrt(x); }try plugging in some example values. For example take x = 4. then result = 2 and 2*2 == 4.
Nov 15 2004
In article <cnbeqf$13bg$1 digitaldaemon.com>, Ben Hinkle says... Of course you are right, sorry for that (should have read the function name closer, missed the *root* part). Sorry for that, again
Nov 16 2004
Serge Ratke wrote:Hi guys, i'm pretty new to D (wrote a simple Hello World), but ... shouldn't the out assert be more like (x * x) == result? long square_root(long x) in { assert(x >= 0); } out (result) { assert((result * result) == x); } body { return math.sqrt(x); }As has been noted, the general idea of this contract is correct. However, the out contract is incorrect because it assumes that x is a square number. This contract will obviously fail if x is, for instance, 2. WALTER: This needs to be changed on the website...
Nov 16 2004
On Tue, 16 Nov 2004 06:53:44 -0700, Russ Lewis <spamhole-2001-07-16 deming-os.org> wrote:Serge Ratke wrote:I'm assuming he meant double/real instead of long. (possibly from C's long double?) I don't think i've seen (m)any root functions taking integrals. -- Using Opera's revolutionary e-mail client: http://www.opera.com/m2/Hi guys, i'm pretty new to D (wrote a simple Hello World), but ... shouldn't the out assert be more like (x * x) == result? long square_root(long x) in { assert(x >= 0); } out (result) { assert((result * result) == x); } body { return math.sqrt(x); }As has been noted, the general idea of this contract is correct. However, the out contract is incorrect because it assumes that x is a square number. This contract will obviously fail if x is, for instance, 2. WALTER: This needs to be changed on the website...
Nov 17 2004
Simon Buchan wrote:On Tue, 16 Nov 2004 06:53:44 -0700, Russ Lewis <spamhole-2001-07-16 deming-os.org> wrote:Well, if they were floats, then it would stil be broken, because of float rounding issues. You'd have to do something like assert(abs((result*result) - x) < SOME_SMALL_VALUE);As has been noted, the general idea of this contract is correct. However, the out contract is incorrect because it assumes that x is a square number. This contract will obviously fail if x is, for instance, 2. WALTER: This needs to be changed on the website...I'm assuming he meant double/real instead of long. (possibly from C's long double?) I don't think i've seen (m)any root functions taking integrals.
Nov 17 2004