На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: archimed7592
  
> Какой самый большой целочисленный тип данных в Qt, , Qt v.5.04 и выше.
    с точки зрения размера в байтах?
        Не удержусь и дам свои комментарии по 64bit типу unsigned long long int.
        Чтобы почувствовать величину такого максимального целого числа, давайте оценим - за какое время современный процессор сможет обнулить весь такой массив данных.
        Пусть присваивание нуля на современном компьютере занимает 10^(-10) сек.
        Тогда массиву чисел от 0 до 2^64 нули можно присвоить за 2^64/(10^10*3600*24)=21350 суток или за 51 год!

        Это все говорит о том, насколько велико "шахматное число".
        Кстати, физический объем памяти 2^64 бит не выглядит совсем уж фантастичным.
        Оценим: 2^64=1.8*10^19. А число Авогадро (число молекул в 1 моле вещества) равно 6*10^23.
        То есть модуль памяти объемом 2^64 байт будет примерно размером с кремниевый кирпич (1 моль кремния)!
        И для хранения 1 байта будет выделено примерно 10000 атомов кремния (число Авогадро разделить на 2^64).

        Выводы на правах ИМХО:
        1. Самым слабым звеном в современных ПК давно уже стало быстродействие (тактовая частота процессора).
        Тактовая частота процессора ограничена размерном атома кремния (примерно 0.1 нанометра или 1 Ангстрем) и равна 3.5-5.0 ГГц.
        Она же и обеспечивает присваивание целому числу нуля за 10^(-10) сек.
        А вот модули памяти можно нарастить и до 128Гб, и до 256Гб и до 1Тб... Только вот скорости процессора не хватает, чтобы с ними эффективно работать.

        2. Зачем же нужен такой тип данных, как long long int, если работать можно только с милимизерными островками этих данных?
        Скажу за себя. Я длинное целое использую сейчас в двух случаях:
        А). Для работы с динамической памятью: при помощи malloc выделяю, например, 6Гб оперативки и потом при помощи long long int нарезаю кусочки от начального указателя выделенного блока.
        (Есть тема в конференции).
        Б). Например, для подсчета числа маршрутов в Задаче Коммивояжера, решаемой методом полного перебора.
        Число маршрутов равно N!
        На современных ПК Задачу Коммивояжера можно решить полным перебором для числа городов 13, а если подождать пару-тройку часов - то для 14 городов.
        Если считать маршруты, то 13!=6.2*10^9, а 14!=8.7*10^10 и 32bit целым тут никак не обойдешься!

        Кстати, по моему опыту обнуление очень большого массива данных (например unsigned char* в 1Гб) - не такая уж и быстрая операция!
        Занимает порядка 1 сек, что уже видно "на глазок". А большим массивам указателей NULL присваивается еще дольше!
        Поэтому если в программе, оперирующей с очень большими массивами данных, есть возможность предварительно не обнулять данные перед расчетом - не надо этого делать. Будет долго!
        Также я сейчас использую для обнуления функцию memset (ну или для того, чтобы задать целым переменным значение -1).
        Книжки говорят, что memset работает быстрее, чем прямое обнуление в цикле (?)

        Как то так.
        Удачи в работе с большими объемами данных и с большими числами!
        Сообщение отредактировано: mkudritsky -
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0181 ]   [ 17 queries used ]   [ Generated: 19.04.24, 16:28 GMT ]