コード例 #1
0
    def __call__(args):
        PRECISION = ML_Binary64
        value_list = [
            FP_PlusInfty(PRECISION),
            FP_MinusInfty(PRECISION),
            FP_PlusZero(PRECISION),
            FP_MinusZero(PRECISION),
            FP_QNaN(PRECISION),
            FP_SNaN(PRECISION),
            #FP_PlusOmega(PRECISION),
            #FP_MinusOmega(PRECISION),
            NumericValue(7.0),
            NumericValue(-3.0),
        ]
        op_map = {
            "+": operator.__add__,
            "-": operator.__sub__,
            "*": operator.__mul__,
        }
        for op in op_map:
            for lhs in value_list:
                for rhs in value_list:
                    print("{} {} {} = {}".format(lhs, op, rhs,
                                                 op_map[op](lhs, rhs)))

        return True
コード例 #2
0
ファイル: random_gen.py プロジェクト: metalibm/metalibm
 def generate_value(generator):
     """ Generate a single value in the normal range """
     field_size = generator.precision.get_field_size()
     field = generator.random.randrange(2**field_size)
     mantissa = 1.0 + field * S2**-generator.precision.get_field_size(
     )
     return NumericValue(mantissa)
コード例 #3
0
 def generate_normal_number(self):
     """ Generate a single value in the normal range """
     field_size = self.precision.get_field_size()
     exp = self.random.randrange(self.precision.get_emin_normal(),
                                 self.precision.get_emax() + 1)
     sign = self.generate_sign()
     field = self.random.randrange(2**field_size)
     mantissa = 1.0 + field * S2**-self.precision.get_field_size()
     return NumericValue(mantissa * sign * S2**exp)
コード例 #4
0
 def generate_subnormal_number(self):
     """ Generate a single subnormal value """
     field_size = self.precision.get_field_size()
     # a subnormal has the same exponent as the minimal normal
     # but without implicit 1.0 digit
     exp = self.precision.get_emin_normal()
     sign = self.generate_sign()
     field = self.random.randrange(2**field_size)
     mantissa = 0.0 + field * S2**-self.precision.get_field_size()
     return NumericValue(mantissa * sign * S2**exp)
コード例 #5
0
ファイル: random_gen.py プロジェクト: nibrunie/metalibm
 def generate_value(generator):
     """ Generate a single value in the normal range """
     field_size = generator.precision.get_field_size()
     exp = generator.random.randrange(
         generator.precision.get_emin_normal(),
         generator.precision.get_emax() + 1)
     sign = generator.generate_sign()
     field = generator.random.randrange(2**field_size)
     mantissa = 1.0 + field * S2**-generator.precision.get_field_size(
     )
     return NumericValue(mantissa * sign * S2**exp)
コード例 #6
0
ファイル: random_gen.py プロジェクト: metalibm/metalibm
 def generate_value(self, generator):
     # TODO/FIXME random.uniform only generate a machine precision
     # number (generally a double) which may not be suitable
     # for larger format
     field_size = generator.precision.get_field_size()
     exp = generator.random.randrange(
         generator.precision.get_emin_normal()
         if self.min_exp is None else self.min_exp,
         (generator.precision.get_emax() +
          1) if self.max_exp is None else self.max_exp)
     sign = generator.generate_sign()
     field = generator.random.randrange(2**field_size)
     mantissa = 1.0 + field * S2**-generator.precision.get_field_size(
     )
     random_value = mantissa * sign * S2**exp
     return NumericValue(
         min(max(self.inf_bound, random_value), self.sup_bound))