【问题标题】:Fastest way to find Quotient by Dividing two Number通过除以两个数字找到商的最快方法
【发布时间】:2011-08-26 14:20:02
【问题描述】:

我必须根据以下实现做一些逻辑。

我有一个高达 36 位的大数字,例如913695089923267549815145223638290430(不同应用随机生成)。我需要将它除以长度更小的任何数字,比如 70368844197664;(由不同的应用程序随机生成)假设我得到的商为 19956694.3256

对于我的代码,只有小数点前商的最后一位(即 4)很重要。目的是检查商是偶数还是奇数,如果可能的话,最后一位的值也是如此。

我不能使用模数或除法等简单的数据库函数,因为它非常耗时。有没有更快更有效的方法?任何建议都将受到高度赞赏。

非常感谢。

问候 尼拉杰

【问题讨论】:

  • 因此,给定 128 位 unsigned int m 和 64 位 unsigned int n,您要计算 (m / n) % 10。那正确吗?这是一个奇怪的要求!它表明某些东西需要重新设计。你需要它做什么?
  • @TonyK:我不能改变需求,但它就在那里。问题是数学问题而不是程序问题。但是我试试我的运气
  • 您需要在查询中还是在函数/过程中使用它?
  • 我需要在代码中使用它,但我们将其移至 sql 查询并更改了一些设计逻辑,因此它对我们有用。

标签: mysql sql-server oracle teradata


【解决方案1】:

您想要做的几乎就是“模算术”的定义。如果您的数据库中的内置算法无法足够快地进行计算,那么除了编写自己的数据库引擎或购买功能更强大的硬件之外,我不确定您能做些什么来改善这一点。

问题真的是算术的速度,还是记录检索或索引?我的意思是,如果你说的是这样的话:

select ... whatever ... from table1 join table2 using (someid)
where (table1.q / table2.d) % 10 = 4

并且您在函数 (table1.q / table2.d ) % 10 上没有索引,这将需要数据库读取每条记录,执行计算,然后挑选出那些给出正确答案的记录.您的问题可能不是算术,而是索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多