Поскольку float
и double
имеют разные машинные представления или размеры и соглашения о вызовах: у многих процессоров есть регистры, выделенные для плавающей запятой, которые могут использоваться для передачи аргументов.
И стандарт C требует, чтобы short
аргументы были преобразованы в int
, а float
аргументы были преобразованы в double
.