Why does this code not do what it should

  • Thread starter Thread starter Cinimod
  • Start date Start date
  • Tags Tags
    Code
AI Thread Summary
The code in question attempts to fill an array, `delx`, with evenly spaced values from 0 to n, but results in all elements being zero. This issue arises from integer division, as both `i` and `n` are declared as integers. When performing the division `i/n`, the result is also an integer, which truncates any decimal values, leading to zero when `i` is less than `n`. To resolve this, casting is recommended. Changing the division to `delx[i] = (float)i / (float)n` or declaring `delx` as a float array can yield the desired results. The discussion emphasizes the importance of type casting in C to avoid unintended integer division outcomes.
Cinimod
Messages
34
Reaction score
0
I can't see what is wrong with this code, but for some reason it doesn't work. It compiles, just doesn't do what it should.

Code:
for(i=0; i<n; i++)
    {
             delx[i] = i/n;
    }

I have defined delx as an array, with n elements, and just want to fill the array with evenly spaced values from 0 to n. When I try running it, it says that all elements of the array are 0. Any chance someone could explain to me where the problem is.
 
Technology news on Phys.org
If i is declared type int, and n is declared type int, that would explain the behavior.

try this:

delx = float(i)/float(n);

this is called casting, when you force the the type of a variable to change for a particular calculation (I am not sure if float() is the correct syntax for C).

Alternatively I think you can declare n as a float, but I am no C expert. The problem though is that when you divide a small integer by a large one and get an integer result, the result has to be zero.
 
Presumably i and n are integers? Integer division will round down.
Use delx[x] = (float)i/(float)n;
 
The problem seems to be that you're not casting correctly (assuming array type int). The way I would do it is to make my array a float and then do a integer division and perform casting:

Code:
#include <stdio.h>

#define n 10

int main()
{
	float delx[n];
	int i=0;
	
	for(i=0; i<n; i++)
    {
             delx[i] = (float) i/n;
             printf("%f\n", delx[i]);
    }
return 0;
}
mgb_phys said:
Presumably i and n are integers? Integer division will round down.
Well if his array has n elements, then array size cannot be specified by a non-integer type. So I guess integer division is sort of implicit.
 
Last edited:
The code in the op doesn't define i or n, or say if n is the array size;
Some (naughty) compilers will cast a float index to an array to int.
 
mgb_phys said:
Presumably i and n are integers? Integer division will round down.
Only if both operands are positive, otherwise the behaviour is implementation defined.
 
KTC said:
Only if both operands are positive, otherwise the behaviour is implementation defined.
Yes, I mean't that they wouldn't round using the normal arithmetic rules which is what the OP expedcted. The word I was looking for was truncate.
 

Similar threads

Replies
2
Views
1K
Replies
9
Views
2K
Replies
31
Views
3K
Replies
11
Views
1K
Replies
5
Views
2K
Back
Top