- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图找到 int 无法容纳的 long double 中的数字个数。它获取用户输入的数字并找到其中的数字并将其放入 int 数组中。对于较小的数字(例如 <10^10),它似乎工作得很好,但当它接近较大的数字时,最后几位数字似乎会消失。
请看一下我的函数:
static void insertDigits(int[] digits, double number) {
double num=number;
int counter=digits(number)-1;
while(counter>=0) {
digits[counter]=(int) (num%10);
num=Math.floor(num/10);
counter=counter-1;
}
}
当我输入 13256709 时,我得到(好):1.3256709E7 11.3256709E7 31.3256709E7 21.3256709E7 51.3256709E7 61.3256709E7 71.3256709E7 01.3256709E7 9但是当我输入一个长数字,例如 25768437216701562 时,我得到:2.576843721670156E16 22.576843721670156E16 52.576843721670156E16 72.576843721670156E16 62.576843721670156E16 82.576843721670156E16 42.576843721670156E16 32.576843721670156E16 72.576843721670156E16 22.576843721670156E16 12.576843721670156E16 62.576843721670156E16 72.576843721670156E16 02.576843721670156E16 12.576843721670156E16 52.576843721670156E16 62.576843721670156E16 0正如您所看到的,最后一位数字已关闭。如果部分代码存在其他问题,如果需要,我们很乐意发送更多代码。我觉得这与模运算符对 double 的时髦有关。感谢您的帮助!
最佳答案
您的方法不适用于double
,因为累积的舍入误差会让您少掉几位数字。要在不损失精度的情况下转换 double 值,您必须专门使用整数算术。即使用 Double.doubleToRawLongBits(d)
并使用 IEEE-754 格式从那里开始工作。
But when I input a long number such as 25768437216701562, I get: 2.576843721670156E16
这是因为 2.576843721670156E16 是最接近的可表示值,其后的下一个值是 2.5768437216701564E16
您可以通过以下代码看到这一点,它将 64 位浮点视为 64 位长。
System.out.println(Double.doubleToRawLongBits(25768437216701560.0));
System.out.println(Double.doubleToRawLongBits(25768437216701564.0));
打印
4852315308354829086
4852315308354829087
正如这两个长值之间没有长表示一样,它们之间也没有双重表示。
关于java - 使用 Modulo 和 Double 来查找数字的数字有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53573970/
例如我想计算(相当有效) 2^1000003 模 12321 最后我想做 (2^1000003 - 3) mod 12321。有什么可行的方法吗? 最佳答案 基本模属性告诉我们 1) a + b (m
因此,假设我有一个数字123456。123456%97 =72。如何确定需要在123456的末尾添加两位数字,以使新数字%97 = 1?注意-必须始终为两位数。 例如,12345676%97 =1。在
我被困在这个密码学问题上,使用整数和分数 mod 10 的乘法。 这是等式: 7 * (4/11) mod 10 =? 我知道我应该将其转换为整数,因为 mod 运算符不适用于分数,但我无法弄清楚这一
从“Programming Pearls”一书中转述(关于旧机器上的 c 语言,因为这本书是 90 年代后期的): 整数算术运算(+、-、*)可能需要大约 10 纳秒,而 %运算符(operator)
我想知道模数是如何工作的。我知道当较大的数字排在第一位时它是如何工作的,但反之则不然。我知道 7 % 3 = 1 因为 3 上升到 7 2 次,剩下的是 1。但是,当它是 3 % 7 时。我用过计算器
Cubical Agda 库 defined a Modulo type like this : data Modulo (k : ℕ) : Type₀ where embed : (n : ℕ)
我正在搞乱 python 中的模运算,我知道它会吐出余数是什么。 但是如果第一个数字小于第二个数字怎么办? 例如 2 % 5 答案是 2。 这是如何工作的? 2/5 = .4 最佳答案 这有帮助 22
我是 coq 新手,我在应用归纳法方面确实遇到困难。只要我能使用图书馆里的定理,或者诸如omega之类的策略,这一切都“不是问题”。但一旦这些不起作用,我就会陷入困境。 准确地说,现在我试图证明 Le
我有一个关于 C++ 模数的问题。我想要做的是除以一个非常大的数字,例如 M % 2,其中 M = 54,302,495,302,423。然而,当我去编译时,它说这个数字对于 int 来说太“长”了。
这个问题在这里已经有了答案: Is floating point math broken? (31 个答案) 关闭 6 年前。 我正在尝试计算 (6.6 % 1.1)。我希望这是 0,但我得到 1.
根据Google Calculator (-13) % 64 是 51。 根据 Javascript(见 JSBin),它是 -13。 我该如何解决这个问题? 最佳答案 Number.prototyp
我有一个从互联网上下载的程序,需要从一个三位数字中打印出每个数字。例如: 输入:123 预期输出: 1 2 3 我有 598 需要得到: 5 9 8 我尝试使用这个公式,但问题是当数字与小数函数失败时
我正在使用 Coin-Or 的 rehearse实现线性规划。 我需要模数约束。示例:x 应为 3 的倍数。 OsiCbcSolverInterface solver; CelModel model(
我有以下代码: y = IndexedBase('y') z = y[0] % 2000 这给出了错误: sympy.polys.polyerrors.PolynomialError: non-com
我们得到一个整数 'N' 。我们可以选择 (1 到 z) 范围内的任意 2 个数字(a 和 b)。 L 的值由下式给出, L = Max(( (N%a) %b) %N) 我们必须计算给定值 'L'
我是一名 PHP 初学者,我正在尝试解决 Modulo Kattis 问题,当我在终端中测试我的代码时,它运行良好,但当我提交我的解决方案时,我得到“错误答案”。 问题(https://open.ka
我有以下示例数据: Id Name Quantity 1 Red 1 2 Red 3 3 Blue 1 4 Red
我想这个的解决方案很简单,但我已经考虑了一段时间,无法想出一个优雅的解决方案。 我有一系列数字,例如1..10 = (1,2,3,4,5,6,7,8,9,10) ,这是圆形,意味着最后一个之后的数字再
编译 gfortran --version == GNU Fortran (Homebrew GCC 8.2.0) 8.2.0 当我编写以下测试代码时,我得到了函数 MOD和 MODULO给出相同的结
我正在编写一个使用 16x16 对象网格的 2D 元胞自动机。对象存储在表示网格的多维数组中。为了计算下一代的值,我需要检查周围细胞的状态(打开或关闭)。如果要检查的单元格位于网格的边缘,那么我想让该
我是一名优秀的程序员,十分优秀!