c++ - 我在这里做 double 到 float 的转换吗

标签 c++

const double dBLEPTable_8_BLKHAR[4096] = {
  0.00000000000000000000000000000000,
  -0.00000000239150987901837200000000,
  -0.00000000956897738824125100000000,
  -0.00000002153888378764179400000000,
  -0.00000003830892270073604800000000,
  -0.00000005988800189093979000000000,
  -0.00000008628624126316708500000000,
  -0.00000011751498329992671000000000,
  -0.00000015358678995269770000000000,
  -0.00000019451544774895524000000000,
  -0.00000024031597312124120000000000,
  -0.00000029100459975062165000000000
} 

如果我将上面的 double 更改为 float,我在对数组内容执行操作时是否会产生转换 cpu 周期?还是在编译时整理出“转换”?

比如说,dBLEPTable_8_BLKHAR[1] + dBLEPTable_8_BLKHAR[2],像这样简单的东西?

在相关说明中, float 应该能够存储多少位小数?

这是 C++。

最佳答案

任何好的编译器都会在编译时转换初始值设定项。不过,你也问了

am I incurring conversion cpu cycles when I perform operations on the array contents?

这取决于执行操作的代码。如果您的表达式将数组元素与 double 类型的变量组合在一起,则运算将以 double 执行,并且数组元素将在算术发生之前提升(转换)。

如果您只是将数组元素与 float 类型的变量(包括其他数组元素)组合在一起,那么该操作将在 float 上执行并且该语言不需要任何提升(但是如果您的硬件只实现 double 运算,转换可能仍会完成。不过,这样的硬件肯定会使转换成本非常低。)

关于c++ - 我在这里做 double 到 float 的转换吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29579798/

相关文章:

c++ - OpenMP:并行不做任何事情

c# - 如何在 C# 中使用 1 Console.Writeline() 编写两个字符串及其两个变量值

c++ - 将子类对象传递给采用父类(super class)对象的函数

c++ - 删除 visual studio 标题中的 void 指针

c++ - 从 QGraphicsScene/QgraphicsItemGroup/QGraphicsView 中正确删除项目

c++ - 引用类型和继承问题

c++ - 使用 OpenCV 显示流有时会收到一个空帧并卡住

c++ - 将函数作为构造函数参数传递未被正确识别

c++ - 是否可以在不重新启动 Visual Studio 的情况下编译 32 位和 64 位配置?

c++ - 在 C++ 中的 vector 中存储具有双重继承的对象