Нет способа сделать это, используя встроенные функции php.
Тот, который использует "double", дает вам реальный результат, на 100% точный. Float один не так.
В PHP float и double имеют одинаковый тип, который является double.
Если вам нужны результаты высокой точности, которые всегда дают одинаковые результаты, попробуйте использовать модуль BC Math: http://php.net/bcmath
Пример кода с использованием BC Math:
$result = bcmul("123456", "0.99524", 6); // gives 122868.34944
$result = number_format($result, 6, ".", ""); // 122868.349440 - appending zeros
echo $result;
Выход:
122868.349440
Если вы действительно хотите получить тот же результат, что и в программе на C, тогда у вас есть 2 варианта:
Создайте свою собственную c-like функцию, написав расширение php: http://www.google.com/search?q=writing+php+extensions
Поговорите с C-программой из PHP через функцию proc_open ():
http://www.php.net/manual/en/function.proc-open.php (см. Также popen (), exec () или shell_exec ())