Article: Increasing the D Compiler Speed by Over 75%
John Colvin
john.loughran.colvin at gmail.com
Mon Jul 29 07:39:01 PDT 2013
On Monday, 29 July 2013 at 13:05:10 UTC, JS wrote:
> On Monday, 29 July 2013 at 12:36:36 UTC, John Colvin wrote:
>> On Monday, 29 July 2013 at 12:35:59 UTC, John Colvin wrote:
>>> On Monday, 29 July 2013 at 12:17:22 UTC, JS wrote:
>>>> Even something like
>>>>
>>>> for(;;)
>>>> {
>>>> if (random() == 3) break;
>>>> }
>>>>
>>>> is decidable(it will halt after some time).
>>>
>>> That program has a finite average runtime, but its maximum
>>> runtime is unbounded. You can't actually say it *will* halt.
>>> For any given input (in this case 0 inputs) one cannot tell
>>> whether the program will eventually halt, therefore it is
>>> undecidable.
>>>
>>> I have formal background in CS so I might have got that
>>> totally wrong.
>>
>> sorry, that should be "I have NO formal background in CS"
>
> No, again, it isn't about infinite run time.
>
> decidability != infinite run time.
>
> to simplify, let's look at the program,
>
> for(;;) if (random() == 0) break;
>
> where random() returns a random number, not necessarily
> uniform, between 0 and 1.
>
> Same problem just easier to see.
>
> Since there must be a chance for 0 to occur, the program must
> halt, regardless of how long it takes, even if it takes an
> "infinite" amount of time.
>
> That is, the run time of the program may approach infinity BUT
> it will halt at some point because by the definition of random,
> 0 must occur... else it's not random.
>
> So, by the fact that random, must cover the entire range, even
> if it takes it an infinitely long time(so to speak), we know
> that the program must halt. We don't care how long it will take
> but just that we can decide that it will.
>
> The only way you could be right is if random wasn't random and
> 0 was never returned... in that case the program would not
> halt... BUT then we could decide that it never would halt...
>
> In both cases, we can decide the outcome... if random is known
> to produce 0 then it will halt, if it can't... then it won't.
>
> But random must produce a 0 or not a 0 in an infinite amount of
> time. (either 0 is in the range of random or not).
>
> That is, the halting state of the program is not random even
> though it looks like it. (again, it's not how long it takes but
> if we can decide the outcome... which, in this case, rests on
> the decidability of random)
>
> Another way to see this, flipping a fair coin has 0 probability
> of producing an infinite series of tails.
>
> Why?
>
> After N flips, the probability of flipping exactly N tails is
> 1/N -> 0.
Ok, I think I get what you mean now. The 2 states of interest for
the halting problem are, for a give input:
1) program *can* stop
2) program *will not* stop
is that correct?
More information about the Digitalmars-d-announce
mailing list