2017-09-19 5 views
2

私はこの表現を持っている:私は、浮動小数点ビットを取り除くか、それは私がそれを整数型に変換しないかだけの1を生産しているどのようにラケットで浮動小数点を取り除く方法は?

#i1.0 

:と評価さ

(floor (sqrt 2)) 

。私はドキュメンテーションを見たが、何も見つからなかった。ありがとう。

+2

「不正確 - >正確」。 –

+0

ありがとうございます。それでおしまい。 – mtheorylord

答えて

2

@Alexisが指摘しているように、いくつかの方法でinexact->exactがそれを行います。しかし、floorを使用した場合、racket/math(これはデフォルトで#lang racketプログラムに含まれています)によって提供されるさらに簡単な解決方法exact-floorがあります。

この関数はfloorと同じセマンティクスを持ちますが、不正確な数ではなく正確な数値が生成されます。 +inf.0+nan.0(および関連変異体は)唯一の浮動小数点数であり、何の正確なアナログを持っていないので、あなたがそれらをキャストすることはできないことに注意すべき

もちろん
> (floor 1.2) 
1.0 
> (exact-floor 1.2) 
1 

、その重要:

> (floor +inf.0) 
+inf.0 
> (exact-floor +inf.0) 
; exact-floor: contract violation 
; expected: rational? 
; given: +inf.0 
; [,bt for context] 

基本的に、floor関数はreal?の数値で動作し、exact-floorrational?の数値で動作します。しかし、不正確な>正確なルートに進むと、同じ制限があります。

関連する問題