예제 #1
0
def vdiv(left, right):
    """ Left/right. """
    if left[0] == '#' or right[0] == '#':
        return fp.pack(
            fp.div(fp.unpack(vartypes.pass_double_keep(left)),
                   fp.unpack(vartypes.pass_double_keep(right))))
    else:
        return fp.pack(
            fp.div(fp.unpack(vartypes.pass_single_keep(left)),
                   fp.unpack(vartypes.pass_single_keep(right))))
예제 #2
0
def vtimes(left, right):
    """ Left*right. """
    if left[0] == '#' or right[0] == '#':
        return fp.pack(
            fp.unpack(vartypes.pass_double_keep(left)).imul(
                fp.unpack(vartypes.pass_double_keep(right))))
    else:
        return fp.pack(
            fp.unpack(vartypes.pass_single_keep(left)).imul(
                fp.unpack(vartypes.pass_single_keep(right))))
예제 #3
0
def vcaret(left, right):
    """ Left^right. """
    if (left[0] == '#' or right[0] == '#') and option_double:
        return fp.pack(
            fp.power(fp.unpack(vartypes.pass_double_keep(left)),
                     fp.unpack(vartypes.pass_double_keep(right))))
    else:
        if right[0] == '%':
            return fp.pack(
                fp.unpack(vartypes.pass_single_keep(left)).ipow_int(
                    vartypes.unpack_int(right)))
        else:
            return fp.pack(
                fp.power(fp.unpack(vartypes.pass_single_keep(left)),
                         fp.unpack(vartypes.pass_single_keep(right))))
예제 #4
0
def vcaret(left, right):
    """ Left^right. """
    if (left[0] == '#' or right[0] == '#') and option_double:
        return fp.pack( fp.power(fp.unpack(vartypes.pass_double_keep(left)), fp.unpack(vartypes.pass_double_keep(right))) )
    else:
        if right[0] == '%':
            return fp.pack( fp.unpack(vartypes.pass_single_keep(left)).ipow_int(vartypes.unpack_int(right)) )
        else:
            return fp.pack( fp.power(fp.unpack(vartypes.pass_single_keep(left)), fp.unpack(vartypes.pass_single_keep(right))) )
예제 #5
0
def vdiv(left, right):
    """ Left/right. """
    if left[0] == '#' or right[0] == '#':
        return fp.pack( fp.div(fp.unpack(vartypes.pass_double_keep(left)), fp.unpack(vartypes.pass_double_keep(right))) )
    else:
        return fp.pack( fp.div(fp.unpack(vartypes.pass_single_keep(left)), fp.unpack(vartypes.pass_single_keep(right))) )
예제 #6
0
def vtimes(left, right):
    """ Left*right. """
    if left[0] == '#' or right[0] == '#':
        return fp.pack( fp.unpack(vartypes.pass_double_keep(left)).imul(fp.unpack(vartypes.pass_double_keep(right))) )
    else:
        return fp.pack( fp.unpack(vartypes.pass_single_keep(left)).imul(fp.unpack(vartypes.pass_single_keep(right))) )
예제 #7
0
def value_cdbl(ins):
    """ CDBL: convert a number to double. """
    return vartypes.pass_double_keep(parse_bracket(ins))
예제 #8
0
def value_mkd(ins):
    """ MKD$: return the byte representation of a double. """
    return vartypes.pack_string(vartypes.pass_double_keep(parse_bracket(ins))[1])
예제 #9
0
def value_cdbl(ins):
    """ CDBL: convert a number to double. """
    return vartypes.pass_double_keep(parse_bracket(ins))
예제 #10
0
def value_mkd(ins):
    """ MKD$: return the byte representation of a double. """
    return vartypes.pack_string(
        vartypes.pass_double_keep(parse_bracket(ins))[1])