Files
swift-mirror/utils/SwiftFloatingPointTypes.py
Hugh Bellamy ad4b338062 Fix python lint failures now not excluded as we provide custom exclusions
Looks like flake8 enables other rules when you add something to the
exclusion list. We added W291
2017-03-27 12:31:56 +07:00

52 lines
1.9 KiB
Python

# ===--- SwiftFloatingPointTypes.py ------------------*- coding: utf-8 -*-===//
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
# returns (lower, upper) exclusive bounds for the integer values
# that can be stored into a float
def getFtoIBounds(floatBits, intBits, signed):
floatTy = floating_point_bits_to_type()[floatBits]
sigBits = floatTy.explicit_significand_bits
if not signed:
return (-1, 1 << intBits)
upper = 1 << (intBits - 1)
if intBits <= sigBits:
return (-upper - 1, upper)
ulp = 1 << (intBits - sigBits)
return (-upper - ulp, upper)
class SwiftFloatType(object):
def __init__(self, name, cFuncSuffix, significandBits, exponentBits,
significandSize, totalBits):
self.stdlib_name = name
self.cFuncSuffix = cFuncSuffix
self.significand_bits = significandBits
self.significand_size = significandSize
self.exponent_bits = exponentBits
self.explicit_significand_bits = significandBits + 1
self.bits = totalBits
def floating_point_bits_to_type():
return {
32: SwiftFloatType(name="Float", cFuncSuffix="f", significandBits=23,
exponentBits=8, significandSize=32, totalBits=32),
64: SwiftFloatType(name="Double", cFuncSuffix="", significandBits=52,
exponentBits=11, significandSize=64, totalBits=64),
80: SwiftFloatType(name="Float80", cFuncSuffix="l", significandBits=63,
exponentBits=15, significandSize=64, totalBits=80),
}
def all_floating_point_types():
return floating_point_bits_to_type().values()