Я написал библиотеку линейной алгебры C ++ с использованием шаблонов. Я думал, что когда-нибудь мы захотим использовать комплексные числа или числа с расширенной точностью. Это было, может быть, семь лет назад, а мы еще этого не сделали. Мы почти всегда используем double как тип шаблона, и у нас есть typedef, чтобы сделать это легко.
Несколько раз мы шли другим путем, используя типы , меньшие , чем double. Например, мы использовали float, а не double в приложении с привязкой к памяти, описанном здесь . Но в 99,9% случаев мы используем удвоение.
Если вы используете аргумент шаблона, следите за использованием целочисленного типа, но неявно требующего типа с плавающей запятой. Например, скажем, у вас есть матрица, все записи которой являются целыми числами, и поэтому вы используете класс матрицы . Но затем вы передаете это линейному решателю. Теперь ваша арифметика выполняется с использованием деления integer , и ваши результаты неверны. (Я сделал это!)