Я решал эту проблему на spoj http://www.spoj.com/problems/ATOMS/. Я должен был представить интегральную часть log (m/n)/log (k) в качестве вывода. Я долго ждал m, n, k. Когда я вычислял это с использованием длинных удвоений, я получал неправильный ответ, но когда я использовал float, это было принято.Поплавок лучше, чем двойной, иногда?
printf("%lld\n", (long long)(log(m/(long double)n)/log(k)));
Это дает неправильный ответ, но это:
printf("%lld\n", (long long)((float)log(m/(float)n)/(float)log(k)));
получил принято. Таким образом, существуют ситуации, когда поплавок лучше, чем двойной по отношению к точности?
Это не значит, что 'float' лучше, чем' double'. Вы должны учитывать ошибки округления при преобразовании числа с плавающей запятой в целое число. Это не так просто, как отбросить его. –
Как безопасно преобразовать число с плавающей запятой в целое число? @ The Paramagnetic Croissant – In78