Так сравнение и будет быстрым, но это не гибкий вариант, а log10 должен работать за O(1)
Вид для печати
Мне интересно, математические операции всегда будут медленнее или все таки условия можно как-то обогнать.
плюс у этого варианта нет поддержки float, а мат.операции могли бы заменить бесконечное нахождение количества чисел после запятой условиями
Как я уже написал в предыдущем сообщении, они, в любом случае, будут медленнее, ибо, банально, будет совершено гораздо больше действий, нежели при обычном сравнении.
Во-первых, реализация вещественных чисел в компьютерах такова, что значения после запятой не отличается особой точностью (подробнее), так что математически высчитать подобное будет довольно проблематично. Гораздо проще перевести число в строку и уже работать со строкой.
Во-вторых, количество символов после запятой ограничено тем, сколько этих самых символов ты хочешь вывести. На деле, в большинстве случаев, количество символов после запятой может быть бесконечно большим (даже если, например, после 15-го символа начнутся нули, это не гарантирует то, что после 25-го символа не появится какая-либо ещё цифра).
Исходя из всего этого, в случае с вещественными числами, лучше не определять количество символов после запятой, а задавать то, сколько этих самых символов ты хочешь видеть.
дело в том, что я пытаюсь реализовать функционал экспорта большого числа в массив из натуральных:
В связи с чем, мне нужно узнать сколько чисел после запятой, ХОТЯ БЫ в передаваемой переменной, чтобы можно было разместить их в массиве натуральныхКод HTML:stock EXPORT_NUMBER_TO_ARRAY(number, &output[]) {
for(new _ENTA_ITERATOR = _GET_NUMBER_OF_DIGITS(number); _ENTA_ITERATOR; _ENTA_ITERATOR--) {
output[_ENTA_ITERATOR] = (number - ( number % (_ENTA_ITERATOR*10) ) ) / (10*_ENTA_ITERATOR);
}
}
Повторяю: их может быть БЕСКОНЕЧНО МНОГО. Почитай о том, что такое вещественные числа, если забыл школьный курс алгебры.
Цитата:
Иррациональные числа также могут рассматриваться через бесконечные непрерывные дроби. Следствием доказательства Кантора является то, что действительные числа неисчислимы, а рациональные счетны, отсюда следует, что почти все действительные числа иррациональны.
Да и в любом случае ты будешь ограничен размером массива, в который происходит запись. Так по этому размеру и ориентируйся, копируя такое же число символов. Хотя не совсем представляю зачем такое может пригодиться...
я понимаю, что их может быть сколько угодно, ну допустим я сделаю ограничение на последний порядок (например третий), и все таки, если числа есть только до второго, то есть:
Как мне узнать количество числе после запятой в объявленной части, то есть если я беру уже getPlayerpos, то понятно, что там доли могут быть бесконечно маленькие, но хотя бы узнать есть ли там числа до третьего порядка или это вот это вообще:Код HTML:new Float:a = 0.01;
1234.1
2312.2
плюс, вроде бы многие(все) float при форматировании ограничиваются в порядке: %0.f
Параллельно записывая число как строку и работая с этой строкой впоследствии.
Математически - никак. Вот ответ почему:
main() { new Float:a = 0.01; }
Не совсем понимаю о какой "не очень хорошей" реализации строк идёт речь, ну да не суть.
Другого варианта нет. И нет его ни в одном другом ЯП (кроме совсем уж специфичных случаев), ибо это ограничение не только самих языков (компиляторов), но и железа (принципов работы CPU/FPU).
Лучше внятно объясни для чего именно тебе понадобилась такая функция. Может всё можно реализовать гораздо более человечным образом, не изобретая велосипед.