Преобразование плавания для удвоения

TRUNCATE TABLE сохраняет всю Вашу старую индексацию и этажерку. DROP TABLE, очевидно, избавился бы от таблицы и потребовал бы, чтобы Вы воссоздали ее позже.

9
задан Tony the Pony 14 September 2009 в 14:07
поделиться

5 ответов

Рекомендации по платформе

Это зависит от платформы, используемой для float вычисление. С x87 FPU преобразование осуществляется бесплатно, так как содержимое регистров одинаково - единственная цена, которую вы можете иногда платить, - это трафик памяти, но во многих случаях трафик даже отсутствует, поскольку вы можете просто использовать значение без какого-либо преобразования. x87 - на самом деле странный зверь в этом отношении - на нем трудно правильно различить числа с плавающей запятой и двойные, поскольку используемые инструкции и регистры одинаковы, что отличается от инструкций загрузки / сохранения, а сама точность вычислений контролируется с помощью битов состояния . поскольку некоторые вычисления с плавающей запятой могут быть выполнены с помощью SSE, когда точность вычислений будет только с плавающей запятой вместо значения по умолчанию double.

  • Во всех случаях трафик памяти ниже
  • 11
    ответ дан 4 December 2019 в 14:29
    поделиться

    Преобразования с плавающей точкой в ​​двойные на некоторых платформах происходят бесплатно (PPC, x86, если ваш компилятор / среда выполнения использует "к черту, какой тип вы мне сказали использовать, я собираюсь все оценить) в любом случае в long double, nyah nyah "режим оценки").

    В среде x86, где оценка с плавающей запятой фактически выполняется в указанном типе с использованием регистров SSE, преобразование между float и double примерно так же дорого, как добавление с плавающей запятой или умножение (т.е. вряд ли это будет соображением производительности, если вы не выполняете много из них).

    Во встроенной среде, в которой отсутствует аппаратное обеспечение с плавающей запятой, они могут быть довольно дорогостоящими.

    5
    ответ дан 4 December 2019 в 14:29
    поделиться

    Это относится к используемой вами реализации C ++ . В C ++ тип с плавающей запятой по умолчанию - double . Компилятор должен выдать предупреждение для следующего кода:

    float a = 3.45;
    

    , потому что двойное значение 3.45 присваивается float. Если вам нужно специально использовать float, добавьте к значению суффикса f :

    float a = 3.45f;
    

    Дело в том, что все числа с плавающей запятой по умолчанию double . Это' Можно безопасно придерживаться этого значения по умолчанию, если вы не уверены в деталях реализации вашего компилятора и не имеете существенного представления о вычислениях с плавающей запятой. Избегайте приведений.

    Также см. Раздел 4.5 в Язык программирования C ++ .

    0
    ответ дан 4 December 2019 в 14:29
    поделиться

    Не могу представить, чтобы это было намного сложнее. Большая разница между преобразованием int в long и преобразованием float в double состоит в том, что типы int имеют два компонента (знак и значение), а числа с плавающей запятой - три компонента (знак, мантисса и экспонента).

    IEEE 754 одинарная точность - это закодированный в 32 бита, используя 1 бит для знака, 8 бит для экспоненты и 23 бита для значение. Однако он использует скрытый бит, поэтому значение 24 бит (p = 24), хотя это кодируется с использованием всего 23 бита.

    - Дэвид Голдберг, Что должен знать каждый компьютерный ученый об арифметике с плавающей запятой

    Итак, преобразование между float и double будет сохранять один и тот же знаковый бит, установить последний 23/24 бита мантиссы числа с плавающей запятой равняется мантиссе типа double, а последние 8 бит экспоненты числа с плавающей запятой устанавливается равным показателю числа double.

    Такое поведение может даже быть гарантировано IEEE 754 ... I не проверял, поэтому не уверен.

    0
    ответ дан 4 December 2019 в 14:29
    поделиться

    , вероятно, немного медленнее, чем преобразование int в long, так как требуется больше памяти, а манипуляции более сложны. Хорошая справка о проблемах с выравниванием памяти

    -1
    ответ дан 4 December 2019 в 14:29
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: