Assuming the code surrounding your snippet is coded correctly, it looks like the problem is that your simulation code assumes a bottom-left origin but SFML has the origin at the top-left corner. So current position should be updated as
Also if you haven't already its worth taking the time to understand a bit more about the math behind your simulation. A lot of actual quantities are missing (e.g. MASS, Forces acting along X & Y Axis) and you've taken a very high COR (Coefficient of restitution). Heres a simplified sample:
s.pos.x = ...
s.pox.y = ...
s.vel.x = ...
s.vel.y = ...
deltaT = the fractional time for which we're simulating.
(deltaT = step size for euler's method)
void SimulateOneFrame (float deltaT)
const float MASS = 1.0f; // point mass..
const float GRAVITY = 9.8f;
const float COR = 0.6f; // Coefficient of Restitution
float forcex = 0.0f //force acting along x axis
float forcey = - MASS * GRAVITY; // force acting along y axis
//a first-order approximation of the solution to motion ODE's using Eulers method
// x(t+1) = x(t) + v(t) * dt
// v(t+1) = v(t) + a(t) * dt
// x = position, v = velocity, a = acceleration
s.pos.x += s.vel.x * deltaT;
s.pos.y += s.vel.y * deltaT; // assumes origin (0,0) is bottom left
s.vel.x += forcex / MASS * deltaT;
s.vel.y += forcey / MASS * deltaT;
if (s.pos.y <= SPRITE_HEIGHT) // assumes origin is bottom-left
s.vel.y = -s.vel.y; //reverse velocity vector direction i.e. "bounce"
s.vel.x *= COR;
s.vel.y *= COR; // damp velocity after bouncing because of a non-elastic collision.