std::copy 将双精度数组复制到浮点数组?
std::copy to copy an array of doubles to an array of floats?
我正在与一个非常脱节的 API 合作,它让我弥合了它自己的内部类型之间的许多差距。
在几个地方,我使用 std::copy 将浮点数组提升为双精度数组,或从双精度数组降级为浮点数组,以便在一些更不一致的对象之间穿梭。
问题是:
这是否仍然被认为是最安全、最接近最佳的方法,或者是否有我应该考虑的推荐替代方法?
如果有一些特定于平台的案例会有所帮助,以下是平台案例:
部署是内部的并且非常有限,只有 gcc 4.8,只有 Linux,非常本地和受控的使用。我可以考虑 "dangerous" 平台特定的替代方案,这些替代方案可能在其他平台上未定义,如果它们在性能方面值得的话。
副本的大小在少数三胞胎到一个或两个数组中的数千个条目之间有所不同。源和目标的长度始终相同,因此最简单的复制可能情况,从不范围或条件。
您这样做的方式非常好,而且性能接近最佳。如果你真的想压榨每一滴性能,你可能需要手动编写一些 SSE 代码(例如使用 CVTPD2PS
),但我不会打扰,除非分析显示这些转换是你应用程序中的热点.
我正在与一个非常脱节的 API 合作,它让我弥合了它自己的内部类型之间的许多差距。
在几个地方,我使用 std::copy 将浮点数组提升为双精度数组,或从双精度数组降级为浮点数组,以便在一些更不一致的对象之间穿梭。
问题是: 这是否仍然被认为是最安全、最接近最佳的方法,或者是否有我应该考虑的推荐替代方法?
如果有一些特定于平台的案例会有所帮助,以下是平台案例: 部署是内部的并且非常有限,只有 gcc 4.8,只有 Linux,非常本地和受控的使用。我可以考虑 "dangerous" 平台特定的替代方案,这些替代方案可能在其他平台上未定义,如果它们在性能方面值得的话。
副本的大小在少数三胞胎到一个或两个数组中的数千个条目之间有所不同。源和目标的长度始终相同,因此最简单的复制可能情况,从不范围或条件。
您这样做的方式非常好,而且性能接近最佳。如果你真的想压榨每一滴性能,你可能需要手动编写一些 SSE 代码(例如使用 CVTPD2PS
),但我不会打扰,除非分析显示这些转换是你应用程序中的热点.