implementation with approximate calculations