Poll
Question: division question on Arduino
division - 2 (66.7%)
Arduino - 1 (33.3%)
Total Voters: 3

Pages: [1]   Go Down
Author Topic: division  (Read 615 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

when i run this code i get zero why ??
Code:
analogHigh  = Serial.read( );
      analogLow = Serial.read();
      x = (analogLow + (analogHigh * 256));
      X = ((x/1024)*1.2);
      Serial.print("x=");
      Serial.print( X, DEC);
      Serial.print(" , ");

but when i delete X = ((x/1024)*1.2);

i get the value right but i want it to do the above equation ? any suggestion  ?
Logged

Offline Offline
Edison Member
*
Karma: 48
Posts: 1631
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

If you have declared x and X (bad choice of names by the way) to be integers then (x/1024) will be zero whenever x is less than 1024.

Pete

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

thnx for answering .

i actually have it less then 1024

the answer should be = 0.5859
so i should declare my X to double or float ??
am confused with double and float which one should i use ??


thanks
Logged

Canada
Offline Offline
Sr. Member
****
Karma: 0
Posts: 318
Sometimes teaching, always learning,
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Use float. In Arduino, double does the same thing though.

Just wanted to add, in most cases, it is best to multiply before dividing when working with integers.
if x = 20, (x/100)*25 = 0 ...but (x*25)/100 = 5
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

thats good point thanks smiley
Logged

Offline Offline
Edison Member
*
Karma: 48
Posts: 1631
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

One way ot fix it is to change 1024 to 1024.0 which will then force the division as floating point instead of integer.
And declare X to be float or double. Float gives about 6 digits of precision and double gives about 12 (IIRC).
You will also have to change Serial.print( X, DEC); to Serial.print( X, 4); so that X is printed as a floating point number with 4 digits after the decimal point (or however many you want).

Pete
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

thanks for that . well can i do like if i have x= 0.26 how can i make it = 0.3 which to a proximation value ??
Logged

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 217
Posts: 13707
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


x = x + roundingNr; 
x = int(x*Factor)/Factor;

homework: find the two variables roundingNr and Factor ...
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Canada
Offline Offline
Sr. Member
****
Karma: 0
Posts: 318
Sometimes teaching, always learning,
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Float gives about 6 digits of precision and double gives about 12 (IIRC).
Although that may be the case in other programming languages, in Arduino float and double are essentially the same

http://arduino.cc/en/Reference/Double
Logged


Offline Offline
Edison Member
*
Karma: 48
Posts: 1631
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oooops. Thanks John.

Pete
Logged

Pages: [1]   Go Up
Jump to: