# Results of a Bored Java Student

Wed 29 December 2021# A Graphing Calculator

I didn't realize that if you know C++, you can learn Java in a few days. It didn't take long until I was curious about the things I could make in the limited development environment supplied by my high school.

During class, we had these short programs that would teach the student a basic concept in Java. It took me about a minute to complete each coding activity, so I often found myself staring at my Google Classroom assignments, pretending that I was doing something productive.

After a little while, we finally got to learning how to
call functions in Java. The demo we were given in class to practice was a simulation
of a turtle that you could move around with function calls like `forward()`

and
`turnRight()`

. This finally gave me an idea of something I could make in my free time.

Around the same time, we were doing a lot of graphing
in my Calculus class, so I thought it would be funny to make a graphing
calculator using the turtle. While everyone was making the turtle draw squares,
I had the turtle graphing `y = cos(1/x)`

, and `x = sin(y)`

. Yes, this thing
can graph relations, not just functions.

## y = cos(1/x)

## A relation I cannot remember

I wish I could say this was cool. Of course the code behind it is pretty cool, but the demonstration of mathematics here is lacking. If I can graph real numbers, I better be able to graph imaginary numbers too. Yes, I'm talking about making a mandelbrot set with the turtles.

I first wanted to make the fractal viewer in just ASCII art, but I ended up getting an image that didn't look like a mandelbrot.

## The FailFractal

Turns out, This isn't a fluke, because I did a render using the turtles for color, and it also looks strange.

## The Colored FailFractal

The bug isn't actually in the math, it's just because I forgot how to use temporary variables.

### Improper Imaginary Arithmetic

```
public void Square()
{
aReal = ( aReal * aReal ) - ( aImag * aImag );
aImag = 2 * ( aReal * aImag ); // You can tell something's wrong here...
}
```

### Proper Implementation

```
public void Square()
{
double real = ( aReal * aReal ) - ( aImag * aImag );
aImag = 2 * ( aReal * aImag );
aReal = real;
}
```

You gotta love how experienced programmers create the simplest bugs that cause the most frustration. This almost feels embarrassing. Sure enough, after that fix, I had a working mandelbrot. I actually ported my fractal viewer to C before fixing this bug but I'll expand on that in a later post. I have no idea if I'm the first to discover the weird fractal I made with that small bug, but if I am, I would like it to be known as the FailFractal, discovered by me.