Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 11 по 20 из 39
  1. #11
    Аватар для tnc
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.09.2019
    Сообщений
    121
    Репутация:
    26 ±
    Так сравнение и будет быстрым, но это не гибкий вариант, а log10 должен работать за O(1)
    Цитата Сообщение от MassonNN Посмотреть сообщение
    Тип брать log по числу и округлять по минимуму?

    - - - Добавлено - - -

    Попробовал каждый вариант, самый быстрый это сравнение :/

    Причем как не странно log 10 один из самых долгих, а варианты с % (mod) ещё хуже.

  2. #12
    Аватар для MassonNN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Такой вариант наиболее оптимальный. Тут только объединение условий в группы может как-то помочь ускорить работу функции. Какие-либо математические операции или вызов функций будет априори медленнее.
    Мне интересно, математические операции всегда будут медленнее или все таки условия можно как-то обогнать.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Такой вариант наиболее оптимальный. Тут только объединение условий в группы может как-то помочь ускорить работу функции. Какие-либо математические операции или вызов функций будет априори медленнее.
    плюс у этого варианта нет поддержки float, а мат.операции могли бы заменить бесконечное нахождение количества чисел после запятой условиями
    Последний раз редактировалось DeimoS; 20.12.2019 в 13:31. Причина: Объединил сообщения

  3. #13
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от MassonNN Посмотреть сообщение
    Мне интересно, математические операции всегда будут медленнее или все таки условия можно как-то обогнать.
    Как я уже написал в предыдущем сообщении, они, в любом случае, будут медленнее, ибо, банально, будет совершено гораздо больше действий, нежели при обычном сравнении.

    Цитата Сообщение от MassonNN Посмотреть сообщение
    плюс у этого варианта нет поддержки float, а мат.операции могли бы заменить бесконечное нахождение количества чисел после запятой условиями
    Во-первых, реализация вещественных чисел в компьютерах такова, что значения после запятой не отличается особой точностью (подробнее), так что математически высчитать подобное будет довольно проблематично. Гораздо проще перевести число в строку и уже работать со строкой.

    Во-вторых, количество символов после запятой ограничено тем, сколько этих самых символов ты хочешь вывести. На деле, в большинстве случаев, количество символов после запятой может быть бесконечно большим (даже если, например, после 15-го символа начнутся нули, это не гарантирует то, что после 25-го символа не появится какая-либо ещё цифра).

    Исходя из всего этого, в случае с вещественными числами, лучше не определять количество символов после запятой, а задавать то, сколько этих самых символов ты хочешь видеть.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  4. #14
    Аватар для MassonNN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±
      Открыть/закрыть
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Как я уже написал в предыдущем сообщении, они, в любом случае, будут медленнее, ибо, банально, будет совершено гораздо больше действий, нежели при обычном сравнении.



    Во-первых, реализация вещественных чисел в компьютерах такова, что значения после запятой не отличается особой точностью (подробнее), так что математически высчитать подобное будет довольно проблематично. Гораздо проще перевести число в строку и уже работать со строкой.

    Во-вторых, количество символов после запятой ограничено тем, сколько этих самых символов ты хочешь вывести. На деле, в большинстве случаев, количество символов после запятой может быть бесконечно большим (даже если, например, после 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);
    	}
    
    }
    В связи с чем, мне нужно узнать сколько чисел после запятой, ХОТЯ БЫ в передаваемой переменной, чтобы можно было разместить их в массиве натуральных

  5. #15
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от MassonNN Посмотреть сообщение
      Открыть/закрыть


    дело в том, что я пытаюсь реализовать функционал экспорта большого числа в массив из натуральных:

    Код 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);
    	}
    
    }
    В связи с чем, мне нужно узнать сколько чисел после запятой, ХОТЯ БЫ в передаваемой переменной, чтобы можно было разместить их в массиве натуральных
    Повторяю: их может быть БЕСКОНЕЧНО МНОГО. Почитай о том, что такое вещественные числа, если забыл школьный курс алгебры.

    Иррациональные числа также могут рассматриваться через бесконечные непрерывные дроби. Следствием доказательства Кантора является то, что действительные числа неисчислимы, а рациональные счетны, отсюда следует, что почти все действительные числа иррациональны.


    Да и в любом случае ты будешь ограничен размером массива, в который происходит запись. Так по этому размеру и ориентируйся, копируя такое же число символов. Хотя не совсем представляю зачем такое может пригодиться...
    Последний раз редактировалось DeimoS; 20.12.2019 в 13:53.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #16
    Аватар для MassonNN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±
    Цитата Сообщение от MassonNN Посмотреть сообщение
    ХОТЯ БЫ в передаваемой переменной, чтобы можно было разместить их в массиве натуральных

    я понимаю, что их может быть сколько угодно, ну допустим я сделаю ограничение на последний порядок (например третий), и все таки, если числа есть только до второго, то есть:

    Код HTML:
    new Float:a = 0.01;
    Как мне узнать количество числе после запятой в объявленной части, то есть если я беру уже getPlayerpos, то понятно, что там доли могут быть бесконечно маленькие, но хотя бы узнать есть ли там числа до третьего порядка или это вот это вообще:

    1234.1
    2312.2

    плюс, вроде бы многие(все) float при форматировании ограничиваются в порядке: %0.f
    Последний раз редактировалось MassonNN; 20.12.2019 в 13:54.

  7. #17
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от MassonNN Посмотреть сообщение
    я понимаю, что их может быть сколько угодно, ну допустим я сделаю ограничение на последний порядок (например третий), и все таки, если числа есть только до второго, то есть:

    Код HTML:
    new Float:a = 0.01;
    Как мне узнать количество числе после запятой в объявленной части
    Параллельно записывая число как строку и работая с этой строкой впоследствии.
    Математически - никак. Вот ответ почему:
    1. main()
    2. {
    3. new Float:a = 0.01;
    4. printf("%0.15f", a); // Посмотри какое число будет выведено.
    5. }
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. #18
    Аватар для MassonNN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Параллельно записывая число как строку и работая с этой строкой впоследствии.
    Математически - никак. Вот ответ почему:
    1. main()
    2. {
    3. new Float:a = 0.01;
    4. printf("%0.15f", a); // Посмотри какое число будет выведено.
    5. }
    хм, вот насчет строки мне вообще не нравится :) во-первых это читы, во-вторых я боюсь строк в pawn из-за их не очень хорошей реализации и соответственно накладок в скорости
    Последний раз редактировалось MassonNN; 20.12.2019 в 14:14.

  9. #19
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от MassonNN Посмотреть сообщение
    хм, вот насчет строки мне вообще не нравятся :) во-первых это читы, во-вторых я боюсь строк в pawn из-за их не очень хорошей реализации и соответственно накладок в скорости
    Не совсем понимаю о какой "не очень хорошей" реализации строк идёт речь, ну да не суть.
    Другого варианта нет. И нет его ни в одном другом ЯП (кроме совсем уж специфичных случаев), ибо это ограничение не только самих языков (компиляторов), но и железа (принципов работы CPU/FPU).

    Лучше внятно объясни для чего именно тебе понадобилась такая функция. Может всё можно реализовать гораздо более человечным образом, не изобретая велосипед.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  10. #20
    Аватар для MassonNN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±
    Цитата Сообщение от MassonNN Посмотреть сообщение
      Открыть/закрыть


    дело в том, что я пытаюсь реализовать функционал экспорта большого числа в массив из натуральных:

    Код 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);
    	}
    
    }
    В связи с чем, мне нужно узнать сколько чисел после запятой, ХОТЯ БЫ в передаваемой переменной, чтобы можно было разместить их в массиве натуральных
    собсна вот, а если говорить для чего такой массив, то для работы с шифрованием

 

 
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •