TRUNCATE TABLE сохраняет всю Вашу старую индексацию и этажерку. DROP TABLE, очевидно, избавился бы от таблицы и потребовал бы, чтобы Вы воссоздали ее позже.
Это зависит от платформы, используемой для float вычисление. С x87 FPU преобразование осуществляется бесплатно, так как содержимое регистров одинаково - единственная цена, которую вы можете иногда платить, - это трафик памяти, но во многих случаях трафик даже отсутствует, поскольку вы можете просто использовать значение без какого-либо преобразования. x87 - на самом деле странный зверь в этом отношении - на нем трудно правильно различить числа с плавающей запятой и двойные, поскольку используемые инструкции и регистры одинаковы, что отличается от инструкций загрузки / сохранения, а сама точность вычислений контролируется с помощью битов состояния . поскольку некоторые вычисления с плавающей запятой могут быть выполнены с помощью SSE, когда точность вычислений будет только с плавающей запятой вместо значения по умолчанию double.
Преобразования с плавающей точкой в двойные на некоторых платформах происходят бесплатно (PPC, x86, если ваш компилятор / среда выполнения использует "к черту, какой тип вы мне сказали использовать, я собираюсь все оценить) в любом случае в long double, nyah nyah "режим оценки").
В среде x86, где оценка с плавающей запятой фактически выполняется в указанном типе с использованием регистров SSE, преобразование между float и double примерно так же дорого, как добавление с плавающей запятой или умножение (т.е. вряд ли это будет соображением производительности, если вы не выполняете много из них).
Во встроенной среде, в которой отсутствует аппаратное обеспечение с плавающей запятой, они могут быть довольно дорогостоящими.
Это относится к используемой вами реализации C ++ . В C ++ тип с плавающей запятой по умолчанию - double . Компилятор должен выдать предупреждение для следующего кода:
float a = 3.45;
, потому что двойное значение 3.45 присваивается float. Если вам нужно специально использовать float, добавьте к значению суффикса f :
float a = 3.45f;
Дело в том, что все числа с плавающей запятой по умолчанию double . Это' Можно безопасно придерживаться этого значения по умолчанию, если вы не уверены в деталях реализации вашего компилятора и не имеете существенного представления о вычислениях с плавающей запятой. Избегайте приведений.
Также см. Раздел 4.5 в Язык программирования C ++ .
Не могу представить, чтобы это было намного сложнее. Большая разница между преобразованием 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 не проверял, поэтому не уверен.
, вероятно, немного медленнее, чем преобразование int в long, так как требуется больше памяти, а манипуляции более сложны. Хорошая справка о проблемах с выравниванием памяти