More efficient array setup

I'm using an arduino nano.
Unfortunately, the variables are changing ever like 10 milliseconds lol

Using a float seems to be the best way to give particles different speeds. So a particle with dx = 0.5 will go half as fast as a particle with dx = 1. Another reason for this is that I have to use less math in the overall code. So if it has a dx =1 it will move one pixel for each frame and so on. If I had ints instead of floats, I'd basically have to divide the dx by some number like 2 to get the same result as the previous example.

Here's the whole code:

#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SCREEN_ADDRESS 0x3C
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C

#define xRBound 128
#define xLBound 0
#define yDBound 64
#define yUBound 0

#define particles 20

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

float dx[particles];
float dy[particles];
float yPos[particles];
float xPos[particles];

int radius = 0;
int mass = 1;

const float DEG2RAD = PI / 180.0;
const float RAD2DEG = 180.0 / PI;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(1, INPUT);
  randomSeed(analogRead(1));
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  display.setTextColor(SSD1306_WHITE);
  display.setTextSize(0);
  display.clearDisplay();
  startParticlesRandom();
  //  startParticlesFine();
}

void loop() {
  displayParticles();
  moveParticles();
  //  collisionCheck();
  delay(10);
}


void collisionCheck() {
  for (int i = 0; i < particles; i++) {
    for (int j = 0; j < particles; j++) {
      if (i == j) continue;
      float distance = sqrt(sq(yPos[j] - yPos[i]) + sq(xPos[j] - xPos[i]));
      if (distance - radius * 2 <= 1) {
        //Input complex physics equation that I don't understand yet so that particles will bounce and transfer energy
      }
    }
  }
}


void startParticlesRandom() {
  for (int i = 0; i < particles; i++) {
    yPos[i] = random(yUBound + radius, yDBound - radius);
    xPos[i] = random(xLBound + radius, xRBound - radius);
    dx[i] = random(10, 200) * 0.01 * (random(2) * 2 - 1);
    dy[i] = random(10, 200) * 0.01 * (random(2) * 2 - 1);
    //    Serial.print("particle ");
    //    Serial.print(i);
    //    Serial.println(" set!");
  }
}

void startParticlesFine() {
  yPos[0] = yDBound / 2;
  yPos[1] = yDBound / 2;
  xPos[0] = 5;
  xPos[1] = 123;
  dx[0] = 1.5;
  dx[1] = -0.5;
  dy[0] = 1.5;
  dy[1] = -0.5;
}

void moveParticles() {
  for (int i = 0; i < particles; i++) {
    if (yPos[i] >= yDBound - radius || yPos[i] <= yUBound + radius) {
      dy[i] *= -1;
    }
    if (xPos[i] >= xRBound - radius || xPos[i] <= xLBound + radius) {
      dx[i] *= -1;
    }
    yPos[i] += dy[i];
    xPos[i] += dx[i];
  }
}


void displayParticles() {
  display.clearDisplay();
  for (int i = 0; i < particles; i++) {
    int x = xPos[i];
    int y = yPos[i];
    display.drawCircle(x, y, radius, WHITE);
  }
  display.display();
}

The dx and dy are determined (in the random version of the startup command) as an int between 10 and 200 then multiplied by 0.01 and then a random number 1 or -1 (0 is excluded). So if the random number was 135 and -1, the result for dx would be 1.35, so the numbers never go over 2.

My goal is to make these particles bounce off of each other but, I only got to calculus in collage and though physics was (at one point) my major, the physics equations from the paper I'm reading is going over my head! haha but that's for a different post