Questions tagged «math»

数学涉及程序中数字的操纵。有关一般数学问题,请在[math.stackexchange.com](https://math.stackexchange.com/)上提问。注意:如果您的问题是关于浮点计算的意外结果,请首先阅读[浮点数学是否已损坏?](https://stackoverflow.com/q/588004/1679849)。


21
C / C ++中是否有标准的符号函数(signum,sgn)?
我想要一个返回负数为-1和正数为+1的函数。 http://en.wikipedia.org/wiki/Sign_function 编写我自己的代码很容易,但是似乎应该将其存储在标准库中。 编辑:具体来说,我正在寻找一个对浮点数起作用的函数。
409 c++  c  math 

6
确定整数是否在具有已知值集的两个整数(包括两个整数)之间的最快方法
有没有比x >= start && x <= endC或C ++ 更快的方法来测试整数是否在两个整数之间? 更新:我的特定平台是iOS。这是框模糊功能的一部分,该功能将像素限制为给定正方形中的圆形。 更新:尝试了可接受的答案后,我在一行代码上以正常x >= start && x <= end方式完成了一个数量级的加速。 更新:这是来自XCode的汇编程序的前后代码: 新方法 // diff = (end - start) + 1 #define POINT_IN_RANGE_AND_INCREMENT(p, range) ((p++ - range.start) < range.diff) Ltmp1313: ldr r0, [sp, #176] @ 4-byte Reload ldr r1, [sp, #164] @ 4-byte Reload …
389 c++  c  performance  math 


9
在Python中将N秒添加到datetime.time的标准方法是什么?
给定datetime.timePython中的值,是否有标准的方法向其添加整数秒,例如11:34:59+ 3 = 11:35:02? 这些明显的想法行不通: >>> datetime.time(11, 34, 59) + 3 TypeError: unsupported operand type(s) for +: 'datetime.time' and 'int' >>> datetime.time(11, 34, 59) + datetime.timedelta(0, 3) TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta' >>> datetime.time(11, 34, 59) + datetime.time(0, 0, 3) TypeError: unsupported operand type(s) for +: …
369 python  datetime  time  math 

30
列出N以下所有素数的最快方法
这是我能想到的最好的算法。 def get_primes(n): numbers = set(range(n, 1, -1)) primes = [] while numbers: p = numbers.pop() primes.append(p) numbers.difference_update(set(range(p*2, n+1, p))) return primes >>> timeit.Timer(stmt='get_primes.get_primes(1000000)', setup='import get_primes').timeit(1) 1.1499958793645562 可以使它更快吗? 此代码有一个缺陷:由于numbers是无序集合,因此不能保证numbers.pop()从集合中删除最低的数字。但是,它对某些输入数字有效(至少对我而言): >>> sum(get_primes(2000000)) 142913828922L #That's the correct sum of all numbers below 2 million >>> 529 in get_primes(1000) False >>> 529 in …




19
为什么十进制数字不能完全用二进制表示?
关于浮点表示,已经向SO发布了几个问题。例如,十进制数0.1没有精确的二进制表示形式,因此使用==运算符将其与另一个浮点数进行比较是危险的。我了解浮点表示法的原理。 我不明白的是,从数学的角度来看,为什么小数点右边的数字比左边的数字更“特殊”? 例如,数字61.0具有精确的二进制表示形式,因为任何数字的整数部分始终是精确的。但是数字6.10并不准确。我所要做的就是将小数点后一位移到突然之间,我从埃克塞索比亚(Exactopia)来到了Inexactville。从数学上讲,两个数字之间应该没有本质上的区别,它们只是数字。 相比之下,如果我将小数点向另一方向移动一位以产生数字610,则我仍然处于Exactopia。我可以继续朝这个方向前进(6100、610000000、610000000000000),它们仍然是精确,精确,精确的。但是,只要小数点超过某个阈值,数字就不再精确。 这是怎么回事? 编辑:为澄清起见,我想避免讨论诸如IEEE之类的行业标准表示,而坚持我认为是数学上“纯净”的方式。在以10为底的位置值是: ... 1000 100 10 1 1/10 1/100 ... 以二进制形式,它们将是: ... 8 4 2 1 1/2 1/4 1/8 ... 这些数字也没有任意限制。位置无限地增加到左侧和右侧。



26
“ if”语句过多?
以下代码确实可以满足我的需要,但是它很丑陋,过多或其他许多事情。我已经看过公式并尝试编写一些解决方案,但最终得到了类似数量的语句。 在这种情况下,是否有一种对我有利的数学公式?如果可接受的话,公式是否为16? 为了说明代码,它是针对一种基于同时回合的游戏。.两个玩家每个都有四个动作按钮,结果来自数组(0-3),但是变量“ one”和“ two”可以是如果有帮助,则分配任何东西。结果是0 =都不赢,1 = p1赢,2 = p2赢,3 =双方赢。 public int fightMath(int one, int two) { if(one == 0 && two == 0) { result = 0; } else if(one == 0 && two == 1) { result = 0; } else if(one == 0 && two == …

10
C / C ++中整数除法的快速上限
给定整数值x和y,C和C ++都将商返回q = x/y浮点等效项的下限。我对返回上限的方法感兴趣。例如ceil(10/5)=2和ceil(11/5)=3。 显而易见的方法包括: q = x / y; if (q * y < x) ++q; 这需要额外的比较和乘法。我见过的(实际上使用过的)其他方法都涉及将as float或as强制转换double。有没有更直接的方法来避免额外的乘法(或第二除法)和分支,并且还避免将其转换为浮点数?
262 c++  c  algorithm  math 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.