We are about to switch to a new forum software. Until then we have removed the registration on this forum.

- All Categories 25.7K
- Announcements & Guidelines 13
- Common Questions 30
- Using Processing 22.1K
- Programming Questions 12.2K
- Questions about Code 6.4K
- How To... 4.2K
- Hello Processing 72
- GLSL / Shaders 292
- Library Questions 4K
- Hardware, Integration & Other Languages 2.7K
- Kinect 668
- Arduino 1K
- Raspberry PI 188
- Questions about Modes 2K
- Android Mode 1.3K
- JavaScript Mode 413
- Python Mode 205
- Questions about Tools 100
- Espanol 5
- Developing Processing 548
- Create & Announce Libraries 211
- Create & Announce Modes 19
- Create & Announce Tools 29
- Summer of Code 2018 93
- Rails Girls Summer of Code 2017 3
- Summer of Code 2017 49
- Summer of Code 2016 4
- Summer of Code 2015 40
- Summer of Code 2014 22
- p5.js 1.6K
- p5.js Programming Questions 947
- p5.js Library Questions 315
- p5.js Development Questions 31
- General 1.4K
- Events & Opportunities 288
- General Discussion 365

Hi, In this code I am incrementing the float value so that speed of rotation of the points increament as distance increases but here this float increment is not working properly. Please try the code and check the console for the values. the value "j" is suppose to increment by 0.01 so the values should be 0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.10..and so on but it prints something different.

Can any one explain this to me what I am missing because it never happened to me when I used program in C. I have never encountered such problem before in processing or may be I haven't noticed it ....

```
Particle[] p = new Particle[100];
float j=0.00;
int k;
void setup()
{
size(500, 500, P3D);
for (int i=0;i<100;i++) {
j=j+0.01;
println(j);
p[i] = new Particle(i*10, i*2+10, j );
}
}
void draw() {
background(0);
for (int i=0;i<p.length;i++) {
p[i].display();
p[i].update();
if (p[i].radius>width)
{
p[i].radius=10;
}
}
}
class Particle {
float radius, ParticleNo;
color c;
float speed, v;
Particle(float r, float p, float v) {
radius = r;
ParticleNo = p;
//c = (color) random(#000000);
this.v = v;
c = (color) random(#000000);
}
void display() {
pushMatrix();
translate(width/2, height/2);
rotate(speed);
noStroke();
for (int i=0; i<=360; i+=360/ParticleNo)
{
pushMatrix();
float x = radius * cos(radians(i));
float y = radius * sin(radians(i));
translate(x, y);
// if (i>300)fill(255,0,0);
// else
fill(-1);
ellipse(0, 0, 2, 2);
popMatrix();
}
popMatrix();
}
void update() {
speed=speed+v;
}
}
```

Tagged:

## Answers

What you are seeing is the limits of representation for a float. In base 10 (numbers people normally think about) you cannot represent 1.0/3.0 exactly. Likewise in base 2 you cannot represent some numbers.

If you want the numbers to have the same increment try using a power of 2 that is close to 0.01:

- 0.015625, or 2.0^-6

- 0.0078125, or 2.0^-7

Thanks asimes for your effort but it has been suggested by many programmers and also it was mentioned on the processing website in float reference here . They say incementing with any float is a bad idea because it starts doing the approximation.

so the instead of using this

use this

So my Final code is here but still I am not getting the effect what I am trying to achieve

That is a better approach in the sense that you can more reliably use any number, it will always be "off" by a fixed amount.

What I was trying to show is that adding by an approximation will over time make the approximation worse. Fractions that are a power of 2 are a special case because their sums can be represented accurately.

Likewise in base 10 (not base 2 like floats):

- 0.5 + 0.5 + 0.5… never causes a problem

- 0.33333333 + 0.33333333 + 0.33333333… would continuously become less accurate if 0.33333333 is meant to be 1.0/3.0