2015-12-27 110 views
1

我想让我的球拍类型/球拍加快速度。我的程序使用矩阵数据类型在矩阵上进行操作。我被建议使用数据类型Fixnum。什么是球拍中的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?

回答

3

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

一个Fixnum是一个准确的整数是64位的平台上,其两个补码表示配合到一个32位的平台上的31个比特或63个比特

所以,不,Fixnum对象是一个整数。

请注意0.5和1/2在球拍中是不同的。 0.5是弗洛伦姆,而1/2是精确理性。


顺便说一句,我看不出有什么要说的关于“矩阵”的问题。仅仅以下代码会导致类型错误。

#lang typed/racket 

(: X Fixnum) 
(define X 0.5) 

这是最好的,当你试图了解一个程序来修剪节目下跌了,你可以让你可以了解发生了什么容易事。