← Blog

DFT band gaps run about 30% low, and the miss grows with the gap

· 3 min read · Data snapshot 2026-09-30

High-throughput databases compute band gaps with semi-local functionals because they are affordable across hundreds of thousands of structures. Everyone who uses them knows the gaps come out low. We measured how low, and how the error behaves, by matching 1,120 semiconductors and insulators that have measured band gaps to the ground-state gaps in Materials Project, JARVIS-DFT and AFLOW.

Systematically low

The databases underestimate the measured gap in 86–87% of cases. For compounds the databases do not call metallic, all three put the median gap at 0.70–0.72 times the measured value. Across semiconductors and insulators, the mean absolute error is 0.96–1.02 eV. The three databases agree with each other more than with experiment: their shared starting point, semi-local DFT, matters more than their differences.

The error scales with the gap

The shortfall is not a constant offset. Materials Project underestimates by 0.17 eV on average for compounds measured below 1 eV, and by 2.00 eV for those measured above 4 eV. The same pattern holds in every database, so a constant correction cannot fix it.

Some insulators come out as metals

13–21% of measured semiconductors come out metallic (a gap of 0.05 eV or less) in the database data. Hematite, Fe2O3, measured at 2.2 eV, and Cr2O3, measured at 3.4 eV, are both listed at 0.0 eV in the Materials Project summary data we ingested. Rare-earth and actinide compounds are 30–56% of these false metals but only 17–21% of the matched set.

How to use a database band gap

For screening, treat a database gap as a lower bound and expect the shortfall to grow with the gap. If a candidate sits near a cut-off, check a hybrid-functional, meta-GGA or GW value, or a measurement, before you rank on it.

The study page has the per-database tables, the error by gap range, the benchmark compounds and the largest misses, with notes on which literature values are disputed. Every matched row is downloadable as a CSV.