sproutとはC++でconstexpr等を利用してコンパイル時処理を行う際にサポートしてくれるライブラリです
https://github.com/bolero-MURAKAMI/Sprout
それでabs(floating-point)の挙動を理解する目的でこのライブラリを読んでいたのですが、その際sprout::copysign
という関数にたどり着きました。
https://github.com/bolero-MURAKAMI/Sprout/blob/master/sprout/math/copysign.hpp
一応
http://en.cppreference.com/w/cpp/numeric/math/copysign
なんかもみつつ読んでいるのですが
// // copysign // // issue: // [ !(SPROUT_USE_BUILTIN_CMATH_FUNCTION || SPROUT_USE_BUILTIN_COPYSIGN_FUNCTION) ] // copysign(±x, -0) returns -x for |x| is not 0 . // # returns +x . ( same as copysign(}x, +0) ) // copysign(±x, -NaN) returns -x for |x| is not NaN . // # returns +x . ( same as copysign(}x, +NaN) ) //
というコメントが理解できません。issueというからには現状のコードに問題があるのでしょうが・・・。
そもそも-0
と+0
の区別をこのリンク先のコードではどう実装しているのかがわかりません
-0
と+0
については
IEEE 754における負のゼロ - Wikipedia
を軽く読んだだけのにわか知識です。
コード中にはNaN
かの判定も見られるのでその辺も含め教えていただければ幸いです
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/15 04:16
2016/01/15 09:00
2016/01/18 11:24