|Perl Monk, Perl Meditation|
gcc doesn't 'write programs' per se, it just translates programs you've written in one formal language (C) to another formal language (machine code).
Automatic programming boils down to the deep theoretical question of whether all programming can be reduced to a finite set of generative postulates, the way, say, algebra can. If that were true, programmers would be unnecessary. A few supercomputers with theorem-proving software could sift their way through all the permutations, spitting out every possible well-formed program along the way.
I misspoke.. the automatic programming problem is AI-complete, not NP-complete. The halting problem is, indeed, impossible to solve with a Turning machine, which I believe Von Neumann classified as a 'type-0' computer.
However, a Von Neumann 'type-1' computer (if I've got the numbers right), can solve the halting problem. A type-1 Von Neumann machine has an infinite tape full of ones and zeros, where the address of each cell corresponds to a unique C program, and the value of each cell is a boolean that says whether the program halts or not. In other words, it's a giant lookup table.
Right now, we don't know if that binary sequence can be found by any means other than brute-force examination of every possible program. However, if programming can be reduced to a finite set of generative postulates, it may be possible to calculate the value of any given bit in finite time. It might even be possible to calculate that value with a Turing machine.. in which case, we could sidestep the current proof for the halting problem's unsolvability without actually contradicting it.
Either way, my original assertion still stands. A solution to the halting problem would generate a solution to automatic programming, and vice versa.
Point taken, though one could probably call that a compiler issue.. IIRC, the ANSI-C spec defines all floating-point representations in terms of a minimal error variable elim.
Please insert the code necessary to calculate the square root of 2.