Why does this code not do what it should

  • Thread starter Thread starter Cinimod
  • Start date Start date
  • Tags Tags
    Code
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
6 replies · 3K views
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.
 
Physics 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.
 
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:
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.