“How much accuracy do you lose if you lower precision?” People ask this expecting a number — some universal percentage they can memorize and apply across models, tasks, and deployment settings. A rule of thumb that makes the trade-off simple. The search for that number is understandable, but the number doesn’t exist. Accuracy loss from reduced precision is not a constant, not even approximately. It depends on what the model is doing, how you measure success, and what kinds of errors your application can tolerate. Two models from the same architecture family, evaluated on different tasks with different metrics, can produce entirely different “accuracy loss” stories from the same precision change. This isn’t a hedge. It’s the structural reality of how numerical representation interacts with task-level evaluation, and skipping it leads to one of two equally bad outcomes: teams avoid precision reduction entirely out of unfounded fear, or they adopt it blindly because it “worked for someone else.” Why sensitivity varies — and why architecture alone won’t predict it Precision changes the numerical regime of execution. Intermediate values get rounded differently, small activations may underflow in FP16, accumulations may lose trailing precision in INT8 paths — the same logic behind quantization as controlled approximation, not model damage. Whether any of that affects the final output depends on what the model is trying to do and where numerical sensitivity actually lives in the computation. Some tasks are naturally robust because their evaluation criteria are coarse relative to the perturbation that format changes introduce. Open-ended text generation, for example, is often evaluated on fluency, coherence, and factual accuracy — dimensions where the difference between BF16 and FP32 intermediate computations rarely produces a distinguishable delta in the final output. The logits shift slightly, but the generated text is effectively the same by any reasonable measure. The BF16 versus FP16 distinction matters here too: BF16 trades mantissa bits for the FP32 exponent range, which is why training pipelines and many inference paths reach for it first — see BF16 vs FP16 dynamic range and precision for the structural reasoning. Other tasks are sensitive in specific ways. Classification on ambiguous inputs, where small changes in logit values cross a decision boundary, can be affected. Regression tasks with tight accuracy requirements on rare edge cases can amplify precision effects that average-case metrics don’t detect. Models with numerically unstable intermediate operations — poorly conditioned normalisation, very deep residual chains, certain loss formulations — can behave differently under reduced precision in ways that are hard to predict without running them.Reasoning-heavy tasks sit at the extreme sensitive end of this spectrum. When a model has to chain many dependent steps — multi-hop arithmetic, structured deduction, long-context retrieval that conditions a final answer — small per-step numerical perturbations compound rather than wash out. A single early logit shift can redirect a chain-of-thought down a different path, and the wrong intermediate token propagates. Simpler classification tasks absorb the same perturbation because they collapse a high-dimensional computation into one decision, and the rounding rarely moves the input across the boundary. That contrast is why headline benchmarks on a reasoning model can look stable while task-level correctness on multi-step problems quietly drops. We encounter this asymmetry regularly. A team reduces precision across a set of models, tests headline accuracy, sees no change, and ships with confidence. Later, a subset of users reports degraded behaviour on a rare but important class, and the investigation traces it to a precision-sensitive corner of the model’s input distribution that the headline metric was too coarse to capture. “Accuracy” is not a single metric, and treating it as one hides risk A significant part of the problem is that “accuracy” in practice means whatever metric is easiest to report, and that metric may not be the one that captures the risk you care about. Top-1 classification accuracy on a standard evaluation set tells you about average-case behaviour on that distribution. It says very little about tail behaviour, about calibration, about confidence distribution shifts, or about error characteristics that matter for downstream systems. A precision change can preserve a headline metric while shifting the error distribution in ways that matter operationally — more errors concentrated in a particular class, degraded calibration that makes confidence scores less reliable, or behavioural changes on out-of-distribution inputs that the standard eval set doesn’t contain. This is why a superficial evaluation — “accuracy didn’t change, we’re fine” — can pass at evaluation time and fail in the field. The question isn’t just “did the top-line number move?” It’s “did it move in a way that matters for how this model is actually used?” The point generalises: the decision to run at reduced precision is fundamentally an engineering judgment about controlled approximation, and that judgment is only as good as the evaluation criteria supporting it. Robustness is empirical, not transferable Robustness to precision reduction is not evenly distributed across models, and it’s not reliably predictable from architecture details. Models that look structurally similar — same transformer architecture, same parameter count, similar training recipe — can have different sensitivity profiles because training dynamics, normalisation behaviour, data distribution characteristics, and initialisation randomness all influence where numerical sensitivity ends up living in the model. A model trained with aggressive gradient clipping and stable normalisation might tolerate FP8 inference with minimal quality impact. A model from the same family trained under different conditions might show visible degradation. This makes one common inference pattern particularly unsafe: “we tested reduced precision on Model A and it was fine, so it will be fine on Model B.” That’s not necessarily wrong, but it’s an unvalidated assumption, and unvalidated assumptions about precision behaviour have a track record of eventually producing surprises. The only reliable answer comes from evaluating the specific model-task-metric combination under the precision regime you intend to deploy. The choice of quantization method shifts what you should expect here as well. Post-training quantization (PTQ) applies the precision change after the fact, so a model that was never trained to tolerate it carries whatever sensitivity its training left behind — that is where the surprises tend to surface. Quantization-aware training (QAT) folds the lower-precision regime into training, so the model adapts its weights and activations to the rounding it will face, and the accuracy gap on a given task is usually smaller and more predictable. PTQ is cheaper and often good enough on robust tasks; QAT is the lever to reach for when a sensitive task fails PTQ evaluation. How do you assess precision risk for a specific task? The point here is narrower and more actionable than “lower precision hurts accuracy”: accuracy impact is task-dependent, and precision risk assessment must therefore be criteria-driven. Precision risk assessment checklist Step What to do What it produces 1. Define “correct” State what acceptable output quality means for this specific application A written acceptance bar, not a vibe 2. Identify unacceptable errors Name failure modes (class confusion, calibration drift, tail-case degradation) that would be operationally harmful A prioritised risk list 3. Choose evaluation criteria Select metrics that capture those failure modes — not just headline accuracy, but per-class performance, calibration, and tail behaviour A metric suite that can actually fail the model 4. Measure at target precision Evaluate the model under the precision regime you intend to deploy (FP16, BF16, INT8, FP8), on representative data, on the actual runtime (CoreML, ONNX Runtime, TensorRT) Empirical quality numbers for the deployed configuration 5. Decide with evidence Compare the observed quality change against the acceptance criteria from step 1 A go / no-go grounded in the task, not the architecture In practice this means defining what “correct” means for the application, choosing evaluation criteria that reflect that definition, measuring under representative conditions, and deciding whether the observed change is acceptable. Note that step 4 has to happen on the runtime you actually ship on: INT8 on CoreML and INT8 on ONNX Runtime are not interchangeable, and a model evaluated on one can drift on the other. When that runtime-specificity becomes a project-wide cost, the decision shifts to a different compression choice entirely — covered in distillation vs quantisation for multi-platform edge inference. That’s not a recipe. It’s the minimum structure required to avoid making precision decisions based on vibes — in either direction. Neither “FP8 is always fine” nor “FP32 is always required” survives contact with the actual task-specific reality. The only position that holds up is “evaluate, then decide.” Frequently Asked Questions Why does lower numerical precision produce very different accuracy impact on different tasks? Precision changes the numerical regime of execution — rounding, underflow, and lost trailing precision in accumulation. Whether that reaches the final output depends on what the model is doing and where numerical sensitivity lives in the computation. A task with coarse evaluation criteria, like open-ended generation judged on fluency, often shows no distinguishable change, while a task whose correctness depends on crossing a tight decision boundary can be visibly affected by the same format change. Why is accuracy loss from reduced precision not predictable without task-specific evaluation? Sensitivity is shaped by training dynamics, normalisation behaviour, data distribution, and where numerically unstable operations sit in the model — none of which you can read off architecture details. Two models from the same family can have different sensitivity profiles. The only reliable answer comes from evaluating the specific model-task-metric combination under the precision regime you intend to deploy. Which kinds of models tend to be inherently more robust to quantization, and which tend not to be? Models whose evaluation criteria are coarse relative to the perturbation — open-ended text generation judged on fluency and coherence — tend to be robust. Models with numerically unstable intermediates, tight tail-case requirements, or reasoning chains that compound per-step error tend not to be. Robustness is empirical, not transferable: a model trained with stable normalisation may tolerate FP8 while a same-family sibling trained differently degrades. Why can a single accuracy metric hide quality loss that matters for the actual use case? Top-1 accuracy on a standard set describes average-case behaviour and says little about tail behaviour, calibration, or error distribution. A precision change can preserve the headline number while concentrating errors in a particular class, degrading confidence calibration, or shifting behaviour on out-of-distribution inputs. The metric that is easiest to report is often not the one that captures the risk you care about. How should accuracy impact be evaluated before adopting a lower-precision regime in production? Define what “correct” means for the application, name the unacceptable failure modes, choose metrics that can actually fail the model on those modes, then measure at the target precision on representative data and on the runtime you actually ship on. Decide by comparing the observed change against the acceptance bar — a go/no-go grounded in the task, not the architecture. INT8 on CoreML and INT8 on ONNX Runtime are not interchangeable, so the measurement has to happen on the deployed configuration. When is “the accuracy drop is small” a safe statement, and when is it not? It is safe only when “small” is measured against criteria that capture the failure modes that matter — per-class performance, calibration, and tail behaviour — on representative data at the deployed precision and runtime. It is not safe when it rests on a single headline metric, because that metric can stay flat while the error distribution shifts in operationally harmful ways. “Accuracy didn’t change, we’re fine” can pass at evaluation time and still fail in the field. Why do reasoning-heavy tasks appear especially sensitive to quantization compared with simpler classification tasks? Reasoning tasks chain many dependent steps, so small per-step numerical perturbations compound instead of washing out — a single early logit shift can redirect a chain-of-thought and the wrong intermediate token propagates. Simpler classification collapses the computation into one decision, and rounding rarely moves the input across the boundary. That is why headline benchmarks on a reasoning model can look stable while correctness on multi-step problems quietly drops. How does the choice between post-training quantization and quantization-aware training change the accuracy impact you should expect on a given task? Post-training quantization applies the precision change after the fact, so the model carries whatever sensitivity its training left behind — that is where surprises tend to surface. Quantization-aware training folds the lower-precision regime into training, so weights and activations adapt to the rounding they will face and the task-level gap is usually smaller and more predictable. PTQ is cheaper and often sufficient on robust tasks; QAT is the lever to reach for when a sensitive task fails PTQ evaluation.