c++ - 双除以双数和整数:哪个更好?
问题描述
我总是假设将双精度数除以整数会导致代码更快,因为编译器会选择更好的微码来计算:
double a;
double b = a/3.0;
double c = a/3; // will compute faster than b
对于单个操作,这无关紧要,但对于重复操作,它可以有所作为。我的假设总是正确的还是编译器或 CPU 依赖或其他?
同样的问题也适用于乘法;ie 会3 * a
比3.0 * a
?
解决方案
您的假设不正确,因为您的两个除法操作都将使用两个double
操作数执行。在第二种情况下,c = a/3
整数文字将在double
生成任何代码之前由编译器转换为值。
8.3 常用算术转换 [expr.arith.conv]
1 许多期望算术或枚举类型的操作数的二元运算符会导致转换并以类似的方式产生结果类型。目的是产生一个通用类型,这也是结果的类型。这种模式称为通常的算术转换,其定义如下:
...<br/> (1.3) – 否则,如果任一操作数为双精度,则另一个应转换为双精度。
请注意,在这个 C11 标准草案中,第 6.3.1.8 节(通常的算术转换)具有等效的(实际上,几乎相同的)文本。
推荐阅读
- html - Bootstrap 4 - 使表头具有粘性
- shell - 删除 cron 作业及其评论,由 Puppet 通过 awk/sed 创建的环境
- java - 使用 java 返回错误序列化 Avro 消息
- angular - webpack“找不到命名空间'DataTables'”的角度SSR问题
- c# - Xamarin.Essentials.NotImplementedInReferenceAssemblyException
- c++ - boost::stacktrace 无法提供行号
- java - 如何使用firebase auth将两种类型的用户重定向到Anroid studio中的不同活动
- assembly - 如何将键盘输入保存到程序集中的寄存器中?
- sql - SQL 变量/命令?
- c - 变量持有的可能值