Racket中的Fixnum数据类型是什么?

时间:2015-12-27 06:19:35

标签: racket fixnum typed-racket

我想让我的球拍程序输入/球拍加快速度。我的程序使用Matrix数据类型对矩阵进行操作。我被建议使用数据类型Fixnum。

我有一些矩阵,如, (: X (Matrix Fixnum)) (define X (matrix [[0 1] [2 3]] : Fixnum))
没关系。

但是,如果矩阵中的数字有小数,我会收到错误 (: Y (Matrix Fixnum)) (define Y (matrix [[0 0.5] [1.5 2.5]] : Fixnum))

  

类型检查器:类型不匹配
  预期:Fixnum
  给定:正 - Flonum:0.5

Fixnum是一种机器类型(我不完全理解这是什么;不确定它是否是相关的)。我知道fixnum限制为64位。但为什么0.5(或任何小数,似乎)是一个Fixnum?

1 个答案:

答案 0 :(得分:3)

请阅读文档(http://docs.racket-lang.org/reference/numbers.html)。这是一段摘录:

  

fixnum是一个精确整数,其二进制补码表示在32位平台上为31位,在64位平台上为63位

所以,不,fixnum是一个整数。

请注意,在Racket中0.5和1/2是不同的。 0.5是Flonum,而1/2是Exact-Rational。

顺便说一句,我认为你不得不提到“矩阵”。仅以下代码会导致类型错误。

#lang typed/racket

(: X Fixnum)
(define X 0.5)

当您尝试了解程序以尽可能减少程序时,这是最好的,这样您就可以轻松了解正在发生的事情。