2011-05-16 34 views
3

我必须根据以下实现做一些逻辑。通过划分两个数字找到商的最快方法

我有一个高达36位的大数字,例如913695089923267549815145223638290430(由不同的应用程序随机生成)。我需要的任何数量的长度小于说70368844197664将其分摊;(由不同的应用程序随机生成)假设我得到商作为19956694.3256

对于我的代码只有商的最后一位小数点前(即4)是很重要的。目标是检查商是否是偶数或者最后一位数字的可能值。

我不能使用简单的DB函数,如模数或分区,因为它非常耗时。有没有更快的有效方式?任何建议将不胜感激。

非常感谢。

问候 Neeraj

+2

因此,给定128位'unsigned int m'和64位'unsigned int n',你想计算'(m/n)%10'。是对的吗?这是一个奇怪的要求!它表明有些事情想要重新设计。你需要什么? – TonyK 2011-05-16 16:41:20

+0

@TonyK:我不能改变要求,但它在那里。问题是数学的而不是程序化的。但m试试我的运气 – Neeraj 2011-05-16 18:41:36

+0

你是否需要在查询中,或在一个函数/过程? – 2011-05-16 20:16:16

回答

5

你想要做的是相当多的“模运算”的定义。如果数据库中的内置算法无法足够快地完成计算,我不确定您可以做些什么来改进编写自己的数据库引擎或购买更高功率硬件的短缺。

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

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

和你没有在功能上(table1.q/table2.d)10%的指标,这就要求数据库读取每个记录,进行计算,然后挑选出那些给出正确答案的人。你的问题可能不是算术,而是索引。

相关问题