2015-12-27 51 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) 

這是最好的,當你試圖瞭解一個程序來修剪節目下跌了,你可以讓你可以瞭解發生了什麼容易事。