Требования к реализации R6RS 3.4 гласят:
... Потенциально неточные операции, такие как
sqrt
, при применении к точным аргументам должны по возможности давать точные ответы (например, квадратный корень из точных 4 должен быть точным 2).
(1) Означает ли это, что (* 0 2.2)
должно производить 0.0
, но никогда не 0
в результате?
Однако это не требуется. ...
(2) Означает ли это, что в результате (/ 4 2)
также может быть получено значение 2.0?
(3) Существуют ли реализации, которые таким образом предоставляют целые корни? Как вообще получить функциональность целых квадратных корней? (Вот указатель) ( Пожалуйста, не используйте рекурсивную/итеративную реализацию)
(exact? (sqrt 4))
,(exact? (* 0 2.2))
и(exact? (/ 4 2))
производят#t
. Как и(exact? (/ 4 3))
, поскольку1 1/3
— точное число. - person uselpa   schedule 30.12.2014(* (/ 0.0 0.0) 0)
и(* 0 (/ 1 0.0))
и(/ 0 0.0)
все производят0
(таким образом, точно). Это нормально? - person false   schedule 30.12.2014(/ 0.0 0.0)
вызовет исключение, но оно дает+nan.0
, потому что(inexact? 0.0)
равно#t
. Остальное объясняется здесь. - person uselpa   schedule 30.12.2014(exact? (* 0 2.2))
равно#f
,(* (/ 0.0 0.0) 0)
,(* 0 (/ 1 0.0))
и(/ 0 0.0)
равно+nan.0
, что мне кажется более логичным. - person uselpa   schedule 30.12.2014(/ 0 0.0)
должен быть NaN. Но умножение чего-либо на точный нуль, с математической точки зрения, является точным нулем, поэтому реализациям Scheme разрешено (но не обязательно) учитывать это. - person Chris Jester-Young   schedule 30.12.2014(/ zero zero)
не дало такого результата. - person false   schedule 30.12.2014