RAM (Random Access Memory) is used to store data currently being used by programs for fast read/write access. As RAM is completely solid state, with no moving heads, reading the first bit of data from RAM is approximately 60,000 times faster than reading the first bit of data from a hard disk drive. Hence, RAM is essential for the fast operation of a program. For example, in a java or C++ program, RAM is used to store all variables. If the program had to wait for a hard disk to spin up every time it accessed a variable, the program would take a very long time to run.
RAM is directly accessed and manipulated by a running process. When a program is complied, all variable assignments will refer directly to a RAM address, and not a variable name itself. This RAM address needs to fit within the bounds of a register.
In theory, a 32-bit processor has 32-bit registers (some 32-bit processors have other-sized registers as well, but these are usually auxiliary registers that provide, for example, extra precision for floating point numbers). The highest number that can be represented in 32 bits is 2 32, or 4 294 967 296. This corresponds to a little over 4GB of RAM. When the x86 32-bit standard was drafted in the late 1980s, this number seemed like a reasonable approximating of infinity, but nowadays even home PCs are quickly approaching this limit. To allow more RAM to be present, a 64-bit processor is needed.
Computers do not operate with infinite precision. This fact is often noticeable when programming. For example, in java, the following code:
double d1 = Math.sqrt(2);
produces an output of 2.000000002, as opposed to the expected value of 2.
To combat this problem, most processors have special enlarged registers for holding floating point numbers. With these registers, however, performing a calculation on a floating point number often takes 2 or more clock cycles. In everyday computing, this is not a big problem, however in scientific computing this can often mean that a process will take twice as long to run. And even then, errors such as the java example highlighted above still exist.