ใน Haskell ความแตกต่างระหว่างInt
และกับInteger
คืออะไร? เอกสารคำตอบอยู่ที่ไหน?
ใน Haskell ความแตกต่างระหว่างInt
และกับInteger
คืออะไร? เอกสารคำตอบอยู่ที่ไหน?
คำตอบ:
"จำนวนเต็ม" เป็นประเภทที่มีความแม่นยำโดยพลการ: มันจะเก็บหมายเลขใด ๆ ไว้ไม่ว่าจะมีขนาดใหญ่เท่าใดก็ตามจนถึงขีด จำกัด หน่วยความจำของเครื่องของคุณ ... นี่หมายความว่าคุณไม่เคยมีปัญหาทางคณิตศาสตร์มากเกินไป ในทางกลับกันก็หมายความว่าเลขคณิตของคุณค่อนข้างช้า ผู้ใช้เสียงกระเพื่อมอาจรู้จักชนิด "bignum" ที่นี่
"Int" เป็นจำนวนเต็ม 32 หรือ 64 บิตโดยทั่วไป การใช้งานแตกต่างกันไปแม้ว่าจะรับประกันว่าจะมีอย่างน้อย 30 บิต
ที่มา: Haskell วิกิตำรา นอกจากนี้คุณอาจพบว่าส่วนตัวเลขของA Gentle Introduction to Haskellมีประโยชน์
Int64
มีการใช้งานค่อนข้างไม่ดีในระบบ 32 บิต สำหรับระบบ 64 บิตมันยอดเยี่ยมมาก
Int
คือBounded
ซึ่งหมายความว่าคุณสามารถใช้minBound
และmaxBound
ค้นหาข้อ จำกัด ซึ่งขึ้นอยู่กับการใช้งาน แต่รับประกันว่าจะมีอย่างน้อย [-2 29 .. 2 29 -1]
ตัวอย่างเช่น:
Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)
แต่เป็นความแม่นยำโดยพลการและไม่Integer
Bounded
Prelude> (minBound, maxBound) :: (Integer, Integer)
<interactive>:3:2:
No instance for (Bounded Integer) arising from a use of `minBound'
Possible fix: add an instance declaration for (Bounded Integer)
In the expression: minBound
In the expression: (minBound, maxBound) :: (Integer, Integer)
In an equation for `it':
it = (minBound, maxBound) :: (Integer, Integer)
Intเป็นชนิดของจำนวนเต็มของเครื่องโดยมีช่วงการรับประกันอย่างน้อย-229ถึง 2 29 - 1 ในขณะที่Integerเป็นจำนวนเต็มที่มีความแม่นยำตามอำเภอใจโดยมีช่วงที่มีขนาดใหญ่เท่ากับหน่วยความจำ
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
Int คือ C int ซึ่งหมายถึงค่าอยู่ในช่วง -2147483647 ถึง 2147483647 ในขณะที่จำนวนเต็มตั้งแต่ชุดZทั้งหมดหมายความว่ามันสามารถมีขนาดใหญ่โดยพลการ
$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)
สังเกตเห็นคุณค่าของตัวอักษร Int
โหมโรงกำหนดประเภทตัวเลขพื้นฐานที่สุดเท่านั้น: จำนวนเต็มขนาดคงที่ (Int), จำนวนเต็มความแม่นยำโดยพลการ (จำนวนเต็ม), ...
...
ประเภทจำนวนเต็มความแม่นยำ จำกัด ของ Int ครอบคลุมช่วงอย่างน้อย [- 2 ^ 29, 2 ^ 29 - 1]
จากรายงาน Haskell: http://www.haskell.org/onlinereport/basic.html#numbers
Integer
ถูกนำไปใช้งานInt#
จนกว่าจะได้รับมากกว่าค่าสูงสุดที่Int#
สามารถจัดเก็บได้ ณ จุดนั้นมันเป็นหมายเลขGMP
Integer
งานและดังนั้นจึงInteger
เป็นตัวเลือกที่ดีกว่าเสมอ
Integer
มักจะเร็วกว่าที่เป็นอยู่