|I would not say it's a new concept, DDD introduced the concept of value objects a while back. Strong typing a value is how many implement value objects in C#.
The logical continuation for this concept should be:
1- Add validation, what is the specific range of value that are acceptable to your function. In your example, should you accept a speed of 62123.25?
2- Add units, is it always the same unit, or should you convert from different units?
3- Displacement, Angle, Speed are very vague, are we talking about vehicles on a public road? or a spacecraft? Maybe we should use VehicleSpeed instead?
4- Maybe VehicleSpeed should derive from a base Speed class so you don't repeat units and conversions all the time? But you could add validation of acceptable speed value for a vehicle?
And we're back to the good old OOP. Should you calculate the Displacement in the VehicleSpeed class? I don't think so, this should be composition, but the encapsulation of the speed value, it's units and validation into a class is definitely desirable.
It is a question of perspective. We tend to work with good enough, but if you want accuracy, I would debate that those are the things you NEED to do.
The reasons why most of us don't go the Value Object route are: That's a lot of work. It takes time, we're in a hurry, it makes code base bigger, some would say more complex (I disagree).
Is Primitive Obsession a code smell? I say YES! But are we willing and able to do everything that is required to REALLY fix it?