标签: integer-overflow

1000000000*3 = -1294967296?

我糊涂了!

今天是11月3日

DateTime DateTime = new DateTime(2010,11,3);
long shazbot = 1000000000 * DateTime.Day;
Run Code Online (Sandbox Code Playgroud)

shazbot出现在-1294967296

咦???

c# integer-overflow

6
推荐指数
1
解决办法
949
查看次数

为什么在.NET中检查算术有时比未检查更快?

为什么当我在C#项目属性>构建>高级下打开"检查算术下溢/溢出"时,下面的代码运行得更快(138毫秒),而不是关闭选项(141毫秒)?

测试运行#1:138ms,带有检查算术,141ms没有

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        var s = new Stopwatch();
        s.Start();
        int a = 0;
        for (int i = 0; i < 100000000; i += 3) {
            if (i == 1000)
                i *= 2;
            if (i % 35 == 0)
                ++a;
        }
        s.Stop();
        Console.WriteLine(s.ElapsedMilliseconds);
        Console.WriteLine(a);
    }
}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您注释掉if (i == 1000) i *= 2;,则检查的代码比未检查的代码(116毫秒)运行得慢(120毫秒).

测试运行#2:120ms,带有检查算术,116ms没有

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        var s …
Run Code Online (Sandbox Code Playgroud)

.net c# integer-overflow

6
推荐指数
2
解决办法
259
查看次数

"-ftrapv"和"-fwrapv":哪种效率更高?

来自GNU的网站:

-ftrapv
This option generates traps for signed overflow on addition, subtraction, multiplication operations. 
-fwrapv
This option instructs the compiler to assume that signed arithmetic overflow of addition, subtraction and multiplication wraps around using twos-complement representation. This flag enables some optimizations and disables others.
Run Code Online (Sandbox Code Playgroud)

我有两个问题.1)哪些选项更适合性能?2)当-ftrapv定义说它产生"陷阱" 时,它意味着什么?这是否意味着例外?(我猜不是,但值得问.)

资料来源:https://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Code-Gen-Options.html

c++ gcc gnu g++ integer-overflow

6
推荐指数
1
解决办法
2440
查看次数

如何计算(a次b)除以c仅使用32位整数类型,即使b次不适合这种类型

请考虑以下内容作为参考实现:

/* calculates (a * b) / c */
uint32_t muldiv(uint32_t a, uint32_t b, uint32_t c)
{
    uint64_t x = a;
    x = x * b;
    x = x / c;
    return x;
}
Run Code Online (Sandbox Code Playgroud)

我感兴趣的是一个不需要64位整数类型的实现(在C或伪代码中).

我开始草拟一个如下概述的实现:

/* calculates (a * b) / c */
uint32_t muldiv(uint32_t a, uint32_t b, uint32_t c)
{
    uint32_t d1, d2, d1d2;
    d1 = (1 << 10);
    d2 = (1 << 10);
    d1d2 = (1 << 20); /* d1 * d2 */
    return ((a / d1) …
Run Code Online (Sandbox Code Playgroud)

c integer integer-overflow multiplication integer-division

5
推荐指数
1
解决办法
3254
查看次数

如何避免快速模幂运算中的溢出

我正在尝试解决一个关于 SPOJ 的问题,它需要模幂运算。我正在使用以下 C 代码

long long modpow(long long a,long long b,long long mod)
{
    long long product,pseq;
    product=1
    pseq=a%mod;
    while(b>0)
    {
        if(b&1)
            product=(product*pseq)%mod;
        pseq=(pseq*pseq)%mod;
        b>>=1
    }
    return product;
}
Run Code Online (Sandbox Code Playgroud)

问题是当我想计算时(2^249999999997)%999999999989,它会0因为溢出而给出答案。如何避免溢出?

c integer-overflow c99

5
推荐指数
1
解决办法
1876
查看次数

在 Fortran 中捕获整数异常

有没有办法捕获整数异常,gfortran或者ifort像捕获浮点异常一样?

考虑这个简单的程序来计算阶乘:

program factorial
  use, intrinsic :: iso_fortran_env 

  implicit none
  integer(8)          :: fac
  real(REAL64)        :: facR
  integer,parameter   :: maxOrder = 30
  integer             :: i

  fac = 1 ; facR = 1.e0_REAL64
  do i=2,maxOrder
    fac=fac*i ; facR=facR*real(i,REAL64)
    write(*,*) i, fac, facR
  enddo ! i

end program
Run Code Online (Sandbox Code Playgroud)

在某些时候会出现溢出 -integer(8)如此处所示,它将发生在 21 左右。但是如果没有使用浮点数作为参考的计算,我无法确定......

fortran integer-overflow gfortran intel-fortran

5
推荐指数
1
解决办法
1387
查看次数

mips 中的算术溢出

我刚刚开始学习 MIPS 指令的异常处理程序。

我需要使我的程序具有算术溢出异常,以便我可以测试我的异常处理程序。

我有两个数组 A 和 B。数组 A 有十六进制数,数组 B 有整数。

如何通过添加十六进制数和整数来使溢出?

哪些十六进制数和整数相加会导致溢出?

mips integer-overflow

5
推荐指数
1
解决办法
3万
查看次数

Python在处理大浮点数和整数时防止溢出错误

我正在开发一个 python 程序来计算斐波那契数列中的数字。这是我的代码:

import math
def F(n):
    return ((1+math.sqrt(5))**n-(1-math.sqrt(5))**n)/(2**n*math.sqrt(5))
def fib(n):
    for i in range(n):
        print F(i)
Run Code Online (Sandbox Code Playgroud)

我的代码使用这个公式来查找斐波那契数列中的第 N 个数字:

在此处输入图片说明

这可以计算斐波那契数列中的许多数字,但我确实遇到了溢出错误。

如何改进此代码并防止溢出错误?

注意:我使用的是 python 2.7。

python optimization integer-overflow sequence fibonacci

5
推荐指数
1
解决办法
9084
查看次数

重现行为 MAX_VALUE 和 MIN_VALUE

以下内容也适用于其他MIN_VALUE和,但我们现在MAX_VALUE只关注。Integer我知道在Java中整数是32位的,有Integer.MAX_VALUE = 2147483647(2 31 -1)和Integer.MIN_VALUE = -2147483648(-2 31 )。当使用这些值进行计算时,当超出其范围时,数字会环绕/溢出。因此,当您执行类似操作时Integer.MAX_VALUE + 1,结果与 相同Integer.MIN_VALUE。

MIN_VALUE以下是使用和 进行的一些基本算术计算MAX_VALUE:

Integer.MAX_VALUE:                      2147483647
Integer.MAX_VALUE + 1:                  -2147483648
Integer.MAX_VALUE - 1:                  2147483646
Integer.MAX_VALUE * 2:                  -2
Integer.MAX_VALUE * 3:                  2147483645
Integer.MAX_VALUE * 4:                  -4
Integer.MAX_VALUE * 5:                  2147483643
Integer.MAX_VALUE / Integer.MAX_VALUE:  1
Integer.MAX_VALUE * Integer.MAX_VALUE:  1
Integer.MAX_VALUE / Integer.MIN_VALUE:  0
Integer.MAX_VALUE * Integer.MIN_VALUE:  -2147483648
Integer.MAX_VALUE - Integer.MIN_VALUE:  -1
Integer.MAX_VALUE + Integer.MIN_VALUE: …
Run Code Online (Sandbox Code Playgroud)

java integer integer-overflow max min

5
推荐指数
1
解决办法
230
查看次数

如果 Date.now() 大于 Number.MAX_SAFE_INTEGER 会发生什么?

当然,这又花了 20 万年才发生。但是在 的值超过 的值后,Javascript约会系统会出错吗?会发生什么后果?Date.now()Number.MAX_SAFE_INTEGER

也许这个问题看起来很奇怪而且没用。但是任何人都可以回答我的好奇心以及其他可能有相同问题的人。

javascript numbers date integer-overflow unix-timestamp

5
推荐指数
1
解决办法
157
查看次数