minishell
can_mul.c
Go to the documentation of this file.
1 /* ************************************************************************** */
2 /* */
3 /* ::: :::::::: */
4 /* can_mul.c :+: :+: :+: */
5 /* +:+ +:+ +:+ */
6 /* By: kfujita <kfujita@student.42tokyo.jp> +#+ +:+ +#+ */
7 /* +#+#+#+#+#+ +#+ */
8 /* Created: 2023/02/06 19:29:25 by kfujita #+# #+# */
9 /* Updated: 2023/05/03 19:35:15 by kfujita ### ########.fr */
10 /* */
11 /* ************************************************************************** */
12 
13 #include "ft_math.h"
14 
15 #include <limits.h>
16 #include <stdint.h>
17 
18 bool can_mul(int a, int b)
19 {
20  if (a == 0 || b == 0)
21  return (true);
22  else if ((0 < a && 0 < b) || (a < 0 && b < 0))
23  return (b <= (INT_MAX / a));
24  else if (b < 0)
25  return ((INT_MIN / a) <= b);
26  else
27  return ((INT_MIN / b) <= a);
28 }
29 
30 bool can_mulu(unsigned int a, unsigned int b)
31 {
32  if (a == 0 || b == 0)
33  return (true);
34  else
35  return (b <= (UINT_MAX / a));
36 }
37 
38 bool can_mull(long a, long b)
39 {
40  if (a == 0 || b == 0)
41  return (true);
42  else if ((0 < a && 0 < b) || (a < 0 && b < 0))
43  return (b <= (LONG_MAX / a));
44  else if (b < 0)
45  return ((LONG_MIN / a) <= b);
46  else
47  return ((LONG_MIN / b) <= a);
48 }
49 
50 bool can_mulp(size_t a, size_t b)
51 {
52  if (a == 0 || b == 0)
53  return (true);
54  else
55  return (b <= (UINTPTR_MAX / a));
56 }
bool can_mull(long a, long b)
Definition: can_mul.c:38
bool can_mulu(unsigned int a, unsigned int b)
Definition: can_mul.c:30
bool can_mul(int a, int b)
Definition: can_mul.c:18
bool can_mulp(size_t a, size_t b)
Definition: can_mul.c:50