def ll_float(ll_str): from pypy.rpython.annlowlevel import hlstr from pypy.rlib.rarithmetic import break_up_float, parts_to_float s = hlstr(ll_str) assert s is not None n = len(s) beg = 0 while beg < n: if s[beg] == ' ': beg += 1 else: break if beg == n: raise ValueError end = n-1 while end >= 0: if s[end] == ' ': end -= 1 else: break assert end >= 0 sign, before_point, after_point, exponent = break_up_float(s[beg:end+1]) if not before_point and not after_point: raise ValueError return parts_to_float(sign, before_point, after_point, exponent)
def f(x): if x == 0: s = '1.0' else: s = '1e-100' sign, beforept, afterpt, expt = break_up_float(s) return parts_to_float(sign, beforept, afterpt, expt)
def string_to_float(s): """ Conversion of string to float. This version tries to only raise on invalid literals. Overflows should be converted to infinity whenever possible. """ s = strip_spaces(s) if not s: raise ParseStringError("empty string for float()") # 1) parse the string into pieces. try: sign, before_point, after_point, exponent = break_up_float(s) except ValueError: raise ParseStringError("invalid literal for float()") if not before_point and not after_point: raise ParseStringError("invalid literal for float()") try: return parts_to_float(sign, before_point, after_point, exponent) except ValueError: raise ParseStringError("invalid literal for float()")
def ll_float(ll_str): from pypy.rpython.annlowlevel import hlstr from pypy.rlib.rarithmetic import break_up_float, parts_to_float s = hlstr(ll_str) assert s is not None n = len(s) beg = 0 while beg < n: if s[beg] == ' ': beg += 1 else: break if beg == n: raise ValueError end = n - 1 while end >= 0: if s[end] == ' ': end -= 1 else: break assert end >= 0 sign, before_point, after_point, exponent = break_up_float(s[beg:end + 1]) if not before_point and not after_point: raise ValueError return parts_to_float(sign, before_point, after_point, exponent)
def oofakeimpl(sign, beforept, afterpt, exponent): return rarithmetic.parts_to_float(sign._str, beforept._str, afterpt._str, exponent._str)
def load_float(loader): if readchr(loader) != TYPE_FLOAT: raise ValueError("expected a float") length = ord(readchr(loader)) s = readstr(loader, length) return parts_to_float(*break_up_float(s))
def fn(i): sign, beforept, afterpt, exponent = parts[i] return parts_to_float(sign, beforept, afterpt, exponent)
def ll_strtod_parts_to_float(sign, beforept, afterpt, exponent): return rarithmetic.parts_to_float(LLSupport.from_rstr(sign), LLSupport.from_rstr(beforept), LLSupport.from_rstr(afterpt), LLSupport.from_rstr(exponent))
def f(a, b, c, d): a,b,c,d = hlstr(a), hlstr(b), hlstr(c), hlstr(d) return rarithmetic.parts_to_float(a, b, c, d)
def fn(sign, beforept, afterpt, exponent): return parts_to_float(sign, beforept, afterpt, exponent)
def f(a, b, c, d): a, b, c, d = hlstr(a), hlstr(b), hlstr(c), hlstr(d) return rarithmetic.parts_to_float(a, b, c, d)