【问题标题】:Cycle efficiency when comparing values (-1,1 vs 1,2)比较值时的循环效率(-1,1 vs 1,2)
【发布时间】:2015-06-14 20:20:31
【问题描述】:

我有一个函数可以返回 3 个不同值之一:0、-1、1(或 0、1、2)。

条件 1 比条件 2 更有可能,条件 2 比非条件更可能为真,因此 elseif

function [A] = example(...)
if condition1 == true
   A = 1;
elseif condition2 == true
   A = -1;
else
   A = 0;
end

我需要检查A的值,这样做时,查看A是正数还是负数,或者1还是2会更有效吗?

示例 1:

if A > 0
   % Do something
elseif A < 0
   % Do something else
else
   % Do nothing
end

示例 2:

 if A == 1
    % Do something
 elseif A == 2
    % Do something else
 else
    % Do nothing
 end

女巫的例子将是最有效的循环方式?

【问题讨论】:

  • 您是在谈论 C 还是 MATLAB,因为您标记了这两个标签。如果这只是关于 MATLAB(我假设),请删除 C 标签。谢谢
  • 我读到编译器可以使用正值(无符号)进行更好的优化。
  • C 是一个错误,已被删除。那是否意味着 0、1、2 会更有效率?
  • 处理器使用逻辑门进行比较并将所有位一起比较,所以我想不会有任何区别。
  • 相关:stackoverflow.com/questions/24848359/… - 基本上,编译器/解释器在后台执行优化,因此基本上是相同的。做任何你觉得最舒服的事。

标签: matlab


【解决方案1】:

我建议您过度优化您的代码,并且这两个选项几乎完全相同。如果您担心,为什么不设置一个实验来为这两个选项计时?您可以使用 MATLAB 内置的函数timeit 来比较这两种可能性。

除了比较 (-1, 1) 和 (1,2),您可能还想比较

if A == 1
    % Do something
elseif A == 2
    % Do something else
else
    % Do nothing
end

switch A
    case 1
    % Do something
    case 2
    % Do something else
    otherwise
end

我怀疑这将比 (-1, 1) 与 (1,2) 产生更大的差异,但仍然很小。

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2015-05-03
    相关资源
    最近更新 更多