首页 \ 问答 \ 模数为双打(Modulo for doubles)

模数为双打(Modulo for doubles)

如果一个大整数(我的意思是20位数......)是素数,我需要计算出来。

我正在尝试使用蛮力方法,但(当然)我需要使用双打来包含原始数字。 但是,模运算符(%)是一个整数运算符 - 因此对我来说没用!


I need to work out if a massive integer (I mean 20 digits...) is prime.

I'm trying to use the brute-force method, but (of course) I need to use doubles to contain the original number. However, the modulo operator (%) is an integer operator - thus it is useless to me!


原文:https://stackoverflow.com/questions/1914759
更新时间:2021-12-08 07:12

最满意答案

这是不可能的,双倍只有15位有效数字。 寻找BigInt类的实现 这里讨论C的具体情况


That's not possible, a double only has 15 significant digits. Look for an implementation of a BigInt class. C specific is discussed here.

相关问答

更多
  • %运算符用于整数。 你正在寻找fmod()函数 。 #include int main() { double x = 6.3; double y = 2.0; double z = fmod(x,y); return 0; } The % operator is for integers. You're looking for the fmod() function. #include int main() { double x ...
  • 这是我最终如何做到的: import qualified Data.Vector.Unboxed as V import qualified Data.Vector.Unboxed.Mutable as VM import qualified Data.ByteString.Lazy as BS import Data.Binary import Data.Binary.Get import System.IO.Unsafe (unsafePerformIO) import Unsafe.Coerce r ...
  • 你需要 在main函数顶部定义变量,以记住双精度,非双精度和双精度总和的当前计数 。 int doubles = 0; int nonDoubles = 0; double sumOfDoubles = 0.0; 每次从文件中读取时, 添加到double / non-double / sum while (in.hasNext()) { String token = in.next(); try { // try to convert string to double ...
  • 这是不可能的,双倍只有15位有效数字。 寻找BigInt类的实现。 这里讨论C的具体情况。 That's not possible, a double only has 15 significant digits. Look for an implementation of a BigInt class. C specific is discussed here.
  • 比较两个双打的最常见方法可能是以下(C ++代码),因为在计算过程中你可以引入由于消除引起的错误,有限精度表示和其他(更多细节请参阅每个计算机科学家应该知道的关于浮点运算的内容) ) #include #include #include bool almostEqual(double const a, double const b) { double const diff = sta::abs(a - b); double const tol ...
  • 关键在于如何使用表格 - 概念:编辑器和渲染器 。 只要确保你的第二列实际上包含Double值。 可用的valueOf()方法都可用于使类型显式化。 The key to this is found in How to Use Tables—Concepts: Editors and Renderers. Just make sure your second column actually contains Double values. Either of the available valueOf() m ...
  • 我最喜欢Nammari的答案,但是如果你不使用Commons Lang并且想要坚持使用纯Java: double[] result = Arrays.copyOf(Arrayweight, Arrayweight.length + Arraypulse.length); System.arrayCopy(Arraypulse, 0, result, Arrayweight.length, Arraypulse.length); I like Nammari's answer best, but just ...
  • Guava提供了AtomicDouble ,使用它可能是最简单的事情,而不是自己滚动... 也就是说,它在内部使用AtomicLong的包装器实现,你可以在这里看到它们的addAndGet实现; 它基本上是 while (true) { long current = value; double currentVal = longBitsToDouble(current); double nextVal = currentVal + delta; long next = doubleToRaw ...
  • 将此更改为 System.out.printf("%f x %s @ $%f Total $%f",itemQuantity,itemName,itemPrice,total); 请注意%d是十进制的,你可以参考oracle文档 Change this to System.out.printf("%f x %s @ $%f Total $%f",itemQuantity,itemName,itemPrice,total); Please note that %d is for decimal, you ...
  • C不支持动态数组大小。 您必须动态分配内存并使用指针。 int b = 200; double *a; a = malloc(b * sizeof (double)); 在此之后,您可以访问a就像它是一个数组。 C doesn't support dynamic array sizes. You'll have to dynamically allocate memory and use a pointer. int b = 200; double *a; a = malloc(b * sizeof ...