Why am I getting a dividing by zero error message

tsbockman thomas.bockman at gmail.com
Thu Jan 28 19:02:04 UTC 2021


On Thursday, 28 January 2021 at 18:37:37 UTC, Ruby The Roobster 
wrote:
> Here is the output/input of the program:
> Type in  data for an egg:
> Width: 3
> Hight: 2
>
> object.Error@(0): Integer Divide by Zero
> ...
>
> Here is the source code:
>
> import std.stdio;
> import std.string;
> void main(){
>     egg[1000] data;
>     data[0] = (new egg(0,0,"a"));
>     for(int i = 1;i<1000;i++)
>     {
>         ...
>         data[i] = new egg(tempx,tempy,tempz);
>         for(int x = 0;x < i;x++)
>         {
>             int tempa;
>             int tempb;
>             double temp;
>             tempa = data[x].x;
>             if(tempa < 0)
>                 tempa-=tempa;
>             tempb = data[x].y;
>             if(tempb < 0)
>                 tempb-=tempb;
>             temp = tempa / tempb;
>             if(temp > highs)
>             {
>                 highs = temp;
>                 high = x;
>             }
>         }
> ...
>
> Why is this happening? Does anybody know?

1) Outside the loops, you set `data[0] = (new Egg(0, 0, "a"))`

2) The outer `for(int i` loop, starts at `i = 1`, and so it never 
overwrites the work of step (1).

3) The inner `for(int x` loop starts at `x = 0`, so its first 
pass divides by `data[1].y`. Since you set that field equal to 0 
in step (1), and both operands have type `uint`, the result is a 
divide by zero error.

4) Also, `if(tempb < 0) tempb-=tempb;` will convert any negative 
values into zeroes. Maybe you meant to write `if(tempb < 0) tempb 
= -tempb;` to get the absolute value, instead?

There are many ways you could fix the program. (I won't try to 
guess what the best way is, though, because it's not entirely 
clear to me what this program is actually intended to do. As is, 
it does some calculations, but doesn't try to output their 
results in any way.)


More information about the Digitalmars-d-learn mailing list