首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮助优化算法

帮助优化算法
EN

Stack Overflow用户
提问于 2009-09-05 06:20:25
回答 4查看 273关注 0票数 1

我有一个特殊的应用程序,需要计算非常具体的东西,虽然我擅长逻辑,但数学一直是我的弱点。

给定一个数字,比方说-20,它需要应用100为基数的计算(即基数为100,而不是0。不要与基数100混淆,这完全是另一回事)。

换句话说,数学是这样工作的,105,104,103,102,101,100,-101,-102,-103,-104,-105,……

然后我需要根据这个100的基数来做数学计算。

所以,举个例子:

代码语言:javascript
复制
-140 - 20 =  120
-120 - 20 =  100  
-115 - 20 = -105
-110 - 20 = -110
-105 - 20 = -115
 100 - 20 = -120  
 120 - 20 = -140

如果有帮助的话,这个问题与体育赔率有关。理论上,这指的是钱(一边赌1.40美元赢1.00美元,另一边赌1.00美元赢1.20美元,.20的区别就是赌场所说的“果汁”或他们来回转移资金的分成)。然而,该程序不是处理真正的货币,它更像是一个模拟器。

我目前的公式是这样工作的:

代码语言:javascript
复制
decimal CalculateSides(decimal side, decimal vig)
{
    decimal newSide = side - vig;

    newSide = -(newSide < 0) ? newSide + 100 : newSide - 100;

    return (newSide < 0) ? newSide + 100 : newSide - 100;
}

虽然这个公式有效,但我对条件+/-不是很满意,但这基本上是唯一对我有效的公式。

有没有人能提出一个改进的方法呢?最好不带+/-?

编辑:

当我问这个问题时,我知道一个可能的答案是“这可能是你正在做的最好的方式”,这似乎是共识。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-05 06:43:58

处理这一问题的一种明智的方法是在内部使用从正到负的普通数字进行计算,并且只加/减100来表示。

票数 6
EN

Stack Overflow用户

发布于 2009-09-05 10:28:35

我强烈怀疑您的示例函数已损坏。是复印粘贴的,还是你重新打的?

代码语言:javascript
复制
decimal CalculateSides(decimal side, decimal vig)
{
    decimal newSide = side - vig;
    newSide = -(newSide < 0) ? newSide + 100 : newSide - 100;
    return (newSide < 0) ? newSide + 100 : newSide - 100;
}

试试CalculatesSides(115,20),你会得到-95,不太可能是你想要的。(我很清楚结果应该是-105)。

然而,你想要写的内容似乎已经足够清楚了。我认为应该是:

代码语言:javascript
复制
decimal CalculateSides(decimal side, decimal vig)
{
    decimal newSide;
    side = (side < 0) ? side + 100 : side - 100;
    newSide = side - vig;
    return (newSide < 0) ? newSide - 100 : newSide + 100;
}

这非常简单,而且不容易优化

  1. 将模式从100base更改为0base
  2. compute in 100base
  3. 将结果base从0base转换为100base

你可以做一些基于符号的技巧来避免其他人建议的测试,但结果将非常混乱,可能会更慢。

我的建议是让它保持原样。

票数 2
EN

Stack Overflow用户

发布于 2009-09-05 06:36:45

优化通常是为了让某些东西运行得更快。你是否真的发现你的代码运行得不够快?我想不会。

如果您的代码生成了正确的结果,并且以一种不需要花费大量时间的方式完成,那么就不要管它,专注于其他实际的代码,而不是感知到的问题。

如果你只是担心它的外观,添加一些注释来解释它是如何工作的。您很可能无论如何都必须使用一个公式解决方案来执行此操作,因此您可能不会浪费您的精力。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1382620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档