У нас есть приложение для обработки данных измерений, и в настоящее время все данные хранятся как C++ float
, что означает 32 бита/4 байта на нашей платформе x86/Windows. (32-битное приложение для Windows).
Поскольку точность становится проблемой, ведутся дискуссии о переходе на другой тип данных. Обсуждаемые в настоящее время варианты включают переключение на double
(8 байт) или реализацию фиксированного десятичного типа поверх __int64
(8 байт).
Причина, по которой решение с фиксированным десятичным числом, использующее __int64
в качестве базового типа, даже обсуждается, заключается в том, что кто-то заявил, что производительность double
(все еще) значительно хуже, чем обработка float
, и что мы могли бы увидеть значительные преимущества в производительности, используя собственный целочисленный тип для хранения наших чисел. (Обратите внимание, что мы действительно устроились бы с фиксированной десятичной точностью, хотя код, очевидно, стал бы более сложным.)
Очевидно, что в конце концов нам нужно провести бенчмаркинг, но я хотел бы спросить, соответствует ли истине утверждение о том, что двойники хуже, если смотреть на современные процессоры? Я предполагаю, что для больших массивов удвоения могут испортить кэш-попадания больше, чем с плавающей запятой, но в остальном я действительно не понимаю, как они могут отличаться по производительности?