Because decimal-based floating point numbers have the same problems, but with different numbers.

For example `1.0/3.0 == 0.3333333.....33333`

without end.
All floating point schemes have this problem.
Since binary has so many other advantages,
most computers use it.
Electronic calculators sometimes use hardware decimal-based
calculations since they always
present their results to humans.
Also mainframe computers usually include hardware decimal-based
instructions for use in financial calculations.

Let us graph the sine of `x`

, for `x`

in the range
of 0.0 to 2 PI radians.
Here is a start on doing this.
The value of PI is part of the class `Math`

.
You get it with `Math.PI`

.
To get accurate results,
let us use an increment of 1 over a power of two.
(If you have not read the chapters on applets,
you can skip the rest of this chapter with little loss.)

// assume that the drawing area is 600 by 400 public class sineWave extends Applet { public void paint ( Graphics gr ) { double inc = 1.0/32.0; for ( double x = 0.0; x <= 2*Math.PI; x = x + inc ) { int startX = (int)x; int startY = (int)Math.sin( x ); int endX = (int)x + inc; int endY = (int)Math.sin( x+inc ); gr.drawLine( startX, startY, endX, endY ); } } }

The idea is that each iteration of the loop
will compute two points on the
curve `sin(x)`

and connect them with a line.
If the separation between all the points is small,
all the straight lines will look like a curve.
The various floating point values (such as `x`

)
are cast into `int`

because that type is what
`drawLine()`

expects.