]>
git.saurik.com Git - apple/icu.git/blob - icuSources/test/perf/perldriver/Dataset.pm
2 # ********************************************************************
3 # * Copyright (C) 2016 and later: Unicode, Inc. and others.
4 # * License & terms of use: http://www.unicode.org/copyright.html#License
5 # ********************************************************************
6 # ********************************************************************
8 # * Copyright (c) 2002, International Business Machines Corporation and
9 # * others. All Rights Reserved.
10 # ********************************************************************
13 use Statistics
::Descriptive
;
14 use Statistics
::Distributions
;
17 # Create a new Dataset with the given data.
30 my $stats = Statistics
::Descriptive
::Full-
>new();
31 $stats->add_data(@{$self->{_data
}});
32 $self->{_mean
} = $stats->mean();
35 # Use a t distribution rather than Gaussian because (a) we
36 # assume an underlying normal dist, (b) we do not know the
37 # standard deviation -- we estimate it from the data, and (c)
38 # we MAY have a small sample size (also works for large n).
39 my $t = Statistics
::Distributions
::tdistr
($n-1, 0.005);
40 $self->{_error
} = $t * $stats->standard_deviation();
47 # Set a scaling factor for all data; 1.0 means no scaling.
50 my ($self, $scale) = @_;
51 $self->{_scale
} = $scale;
54 # Multiply the scaling factor by a value.
57 $self->{_scale
} *= $a;
63 return $self->{_mean
} * $self->{_scale
};
66 # Return a 99% error based on the t distribution. The dataset
67 # is desribed as getMean() +/- getError().
70 return $self->{_error
} * $self->{_scale
};
73 # Divide two Datasets and return a new one, maintaining the
74 # mean+/-error. The new Dataset has no data points.
79 my $minratio = ($self->{_mean
} - $self->{_error
}) /
80 ($rhs->{_mean
} + $rhs->{_error
});
81 my $maxratio = ($self->{_mean
} + $self->{_error
}) /
82 ($rhs->{_mean
} - $rhs->{_error
});
84 my $result = Dataset-
>new();
85 $result->{_mean
} = ($minratio + $maxratio) / 2;
86 $result->{_error
} = $result->{_mean
} - $minratio;
87 $result->{_scale
} = $self->{_scale
} / $rhs->{_scale
};
91 # subtracts two Datasets and return a new one, maintaining the
92 # mean+/-error. The new Dataset has no data points.
97 my $result = Dataset-
>new();
98 $result->{_mean
} = $self->{_mean
} - $rhs->{_mean
};
99 $result->{_error
} = $self->{_error
} + $rhs->{_error
};
100 $result->{_scale
} = $self->{_scale
};
104 # adds two Datasets and return a new one, maintaining the
105 # mean+/-error. The new Dataset has no data points.
110 my $result = Dataset-
>new();
111 $result->{_mean
} = $self->{_mean
} + $rhs->{_mean
};
112 $result->{_error
} = $self->{_error
} + $rhs->{_error
};
113 $result->{_scale
} = $self->{_scale
};
117 # Divides a dataset by a scalar.
118 # The new Dataset has no data points.
123 my $result = Dataset-
>new();
124 $result->{_mean
} = $self->{_mean
}/$s;
125 $result->{_error
} = $self->{_error
}/$s;
126 $result->{_scale
} = $self->{_scale
};
130 # Divides a dataset by a scalar.
131 # The new Dataset has no data points.
132 sub multiplyByScalar
{
136 my $result = Dataset-
>new();
137 $result->{_mean
} = $self->{_mean
}*$s;
138 $result->{_error
} = $self->{_error
}*$s;
139 $result->{_scale
} = $self->{_scale
};