Approximate computing frameworks configure applications so they can operate at a range of points in an accuracy-performance tradeoff space. Approximations at layers of system stack provide computation and energy efficiency via lower resource usage by allowing tolerable errors. Instead of overprovisioning the resources at each layer, higher efficiency is achievable if we consider the system stack holistically. This thesis evaluates cross-layer approximate computing. We explore three problems: 1) How to compare approximate computing frameworks in terms of accuracy-efficiency tradeoffs? 2) How to combine them without negating each other’s optimizations? 3) How to achieve significant end-to-end optimizations when the entire system stack is considered? We address the first problem by providing an improved visualization algorithm to represent tradeoff spaces. For the second problem, we analyze the approximation framework in layers of system stack one by one to evaluate end-to-end approximation opportunities. First, we introduce a family of exploration techniques to combine software approximation frameworks. Next, at the programming language layer, an automated precision tuning framework is presented that helps users explore different levels of floating-point approximations in the application. At the architecture level, an unreliable memory framework is implemented and examined. At the hardware and circuit layer, precision tuning information is used to build a reduced-precision FPU. For the third problem, we form the first holistic cross-layer approximate computing framework which integrates approximations at various layers and provides performance and energy improvements in return for minimal accuracy loss.