What happened is the C library included an "FPU emulator".
Actually, the compiler supported a command-line switch to either: generate calls a floating point implemenation of IEEE fp format or emit fp instructions in-line. When a fp instruction was executed on a system without a phyical FPU, the CPU would generate
an invalid instruction exception that was caught by an OS FP emulator.
In this way, an application would run on all systems regardless of the presence of an x87 (or IDT or Weitek FPU). And if you added an x87 the acceleration was pretty good. (Not that x87 acceleration was great in those days.)