mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-01-18 16:27:02 +00:00
maths/number_of_digits.py: Streamline benchmarks (#7913)
* maths/number_of_digits.py: Streamline benchmarks ``` num_digits(262144): 6 -- 0.2226011250168085 seconds num_digits_fast(262144): 6 -- 0.13145116699161008 seconds num_digits_faster(262144): 6 -- 0.09273383300751448 seconds num_digits(1125899906842624): 16 -- 0.6056742920191027 seconds num_digits_fast(1125899906842624): 16 -- 0.15698366600554436 seconds num_digits_faster(1125899906842624): 16 -- 0.1027024170034565 seconds num_digits(1267650600228229401496703205376): 31 -- 1.1957934170495719 seconds num_digits_fast(1267650600228229401496703205376): 31 -- 0.15552304196171463 seconds num_digits_faster(1267650600228229401496703205376): 31 -- 0.13062308297958225 seconds ``` * updating DIRECTORY.md * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update number_of_digits.py Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
daa1c7529a
commit
6aaf0a2c77
|
@ -67,93 +67,23 @@ def num_digits_faster(n: int) -> int:
|
|||
|
||||
def benchmark() -> None:
|
||||
"""
|
||||
Benchmark code for comparing 3 functions,
|
||||
with 3 different length int values.
|
||||
Benchmark multiple functions, with three different length int values.
|
||||
"""
|
||||
print("\nFor small_num = ", small_num, ":")
|
||||
print(
|
||||
"> num_digits()",
|
||||
"\t\tans =",
|
||||
num_digits(small_num),
|
||||
"\ttime =",
|
||||
timeit("z.num_digits(z.small_num)", setup="import __main__ as z"),
|
||||
"seconds",
|
||||
)
|
||||
print(
|
||||
"> num_digits_fast()",
|
||||
"\tans =",
|
||||
num_digits_fast(small_num),
|
||||
"\ttime =",
|
||||
timeit("z.num_digits_fast(z.small_num)", setup="import __main__ as z"),
|
||||
"seconds",
|
||||
)
|
||||
print(
|
||||
"> num_digits_faster()",
|
||||
"\tans =",
|
||||
num_digits_faster(small_num),
|
||||
"\ttime =",
|
||||
timeit("z.num_digits_faster(z.small_num)", setup="import __main__ as z"),
|
||||
"seconds",
|
||||
)
|
||||
from collections.abc import Callable
|
||||
|
||||
print("\nFor medium_num = ", medium_num, ":")
|
||||
print(
|
||||
"> num_digits()",
|
||||
"\t\tans =",
|
||||
num_digits(medium_num),
|
||||
"\ttime =",
|
||||
timeit("z.num_digits(z.medium_num)", setup="import __main__ as z"),
|
||||
"seconds",
|
||||
)
|
||||
print(
|
||||
"> num_digits_fast()",
|
||||
"\tans =",
|
||||
num_digits_fast(medium_num),
|
||||
"\ttime =",
|
||||
timeit("z.num_digits_fast(z.medium_num)", setup="import __main__ as z"),
|
||||
"seconds",
|
||||
)
|
||||
print(
|
||||
"> num_digits_faster()",
|
||||
"\tans =",
|
||||
num_digits_faster(medium_num),
|
||||
"\ttime =",
|
||||
timeit("z.num_digits_faster(z.medium_num)", setup="import __main__ as z"),
|
||||
"seconds",
|
||||
)
|
||||
def benchmark_a_function(func: Callable, value: int) -> None:
|
||||
call = f"{func.__name__}({value})"
|
||||
timing = timeit(f"__main__.{call}", setup="import __main__")
|
||||
print(f"{call}: {func(value)} -- {timing} seconds")
|
||||
|
||||
print("\nFor large_num = ", large_num, ":")
|
||||
print(
|
||||
"> num_digits()",
|
||||
"\t\tans =",
|
||||
num_digits(large_num),
|
||||
"\ttime =",
|
||||
timeit("z.num_digits(z.large_num)", setup="import __main__ as z"),
|
||||
"seconds",
|
||||
)
|
||||
print(
|
||||
"> num_digits_fast()",
|
||||
"\tans =",
|
||||
num_digits_fast(large_num),
|
||||
"\ttime =",
|
||||
timeit("z.num_digits_fast(z.large_num)", setup="import __main__ as z"),
|
||||
"seconds",
|
||||
)
|
||||
print(
|
||||
"> num_digits_faster()",
|
||||
"\tans =",
|
||||
num_digits_faster(large_num),
|
||||
"\ttime =",
|
||||
timeit("z.num_digits_faster(z.large_num)", setup="import __main__ as z"),
|
||||
"seconds",
|
||||
)
|
||||
for value in (262144, 1125899906842624, 1267650600228229401496703205376):
|
||||
for func in (num_digits, num_digits_fast, num_digits_faster):
|
||||
benchmark_a_function(func, value)
|
||||
print()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
small_num = 262144
|
||||
medium_num = 1125899906842624
|
||||
large_num = 1267650600228229401496703205376
|
||||
benchmark()
|
||||
import doctest
|
||||
|
||||
doctest.testmod()
|
||||
benchmark()
|
||||
|
|
Loading…
Reference in New Issue
Block a user