[swift-dev] Why are BinaryFloatingPoint's RawSignificand and RawExponent different type?
Jens Persson
jens at bitcycle.com
Fri Aug 26 18:15:44 CDT 2016
Reason for asking is that I have this:
extension Double {
init(unitRangeFromRawSignificand s: RawSignificand) {
let bitPattern = s | (1023 << 52)
self = unsafeBitCast(bitPattern, to: Double.self) - 1.0
}
}
extension Float {
init(unitRangeFromRawSignificand s: RawSignificand) {
let bitPattern = s | (127 << 23)
self = unsafeBitCast(bitPattern, to: Float.self) - 1.0
}
}
But they would be better as:
extension BinaryFloatingPoint {
init(unitRangeFromRawSignificand s: RawSignificand) {
... problems here, have to try casting things into RawSignificand's
type ...
}
}
Please have a go at that and perhaps you see what I mean or you will come
up with a nice solution that I have missed. (Speed is very important btw.)
/Jens
On Sat, Aug 27, 2016 at 1:02 AM, Stephen Canon <scanon at apple.com> wrote:
> > On Aug 26, 2016, at 6:06 PM, Jens Persson via swift-dev <
> swift-dev at swift.org> wrote:
> >
> > I can understand why
> > Double.RawSignificand is UInt64
> > and
> > Float.RawSignificand is UInt32
> >
> > But I can't understand why both
> > Double.RawExponent
> > and
> > Float.RawExponent
> > should be UInt.
> >
> > Why aren't they also just UInt64 and UInt32, resp.?
>
> Let me flip the question: why would they be UInt64 and UInt32? Absent a
> reason to prefer a specific fixed-with type, Swift integers should
> generally default to being [U]Int (and ideally Int, but RawExponent is
> Unsigned).
>
> – Steve
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20160827/968a5ccd/attachment.html>
More information about the swift-dev
mailing list