# Alexandre Calaça's Blog # How to calculate the square root of a number in Ruby?

Hey guys, how's it going?

It's always a pleasure to share some content and ideas with you. Hope you enjoy it.

Anyway, let's get down to business, shall we?

##Introduction

First, we need to remember that it is possible to calculate the square root of a number from scratch, which it is not the case of this post.

In order to calculate the square root of a number, we're going to use the sqrt method. We can use it from the `Math module` or the `Integer class`. ]

``````Integer.sqrt(parameter)
``````
``````Math.sqrt(parameter)
``````

## Syntax

`Integer class`

``````Integer.sqrt(number)
``````

`Math module`

``````Math.sqrt(number)
``````

## Parameters

The `Integer.sqrt()` and `Math.sqrt()` require a non-negative number as a parameter. The Math module is going to treat the parameter as a float type, while the Integer class as an integer type.

About the `Integer.sqrt()`, if the parameter is not an Integer, such as a float or a string, it is going to be converted to integer first, and only after that the square root is returned. The same process happens to the `Math.sqrt()` method, the parameter is going to be converted to float first.

The conversion between number is a simple case scenario, the problem is when the parameter is string.

A `TypeError` is returned if the parameter value is a String.

``````irb(main):006:0> Integer.sqrt('4')
Traceback (most recent call last):
6: from /usr/local/bin/irb:23:in `<main>'
4: from /var/lib/gems/2.5.0/gems/irb-1.1.0/exe/irb:11:in `<top (required)>'
3: from (irb):5
2: from (irb):6:in `rescue in irb_binding'
1: from (irb):6:in `sqrt'
TypeError (no implicit conversion of String into Integer)
irb(main):007:0> Math.sqrt('4.0')
Traceback (most recent call last):
6: from /usr/local/bin/irb:23:in `<main>'
4: from /var/lib/gems/2.5.0/gems/irb-1.1.0/exe/irb:11:in `<top (required)>'
3: from (irb):6
2: from (irb):7:in `rescue in irb_binding'
1: from (irb):7:in `sqrt'
TypeError (can't convert String into Float)
``````

A `Math::DomainError` is returned if a negative value is used as a parameter.

``````irb(main):001:0> Integer.sqrt(-2)
Traceback (most recent call last):
5: from /usr/local/bin/irb:23:in `<main>'
3: from /var/lib/gems/2.5.0/gems/irb-1.1.0/exe/irb:11:in `<top (required)>'
2: from (irb):1
1: from (irb):1:in `sqrt'
Math::DomainError (Numerical argument is out of domain - "isqrt")
irb(main):002:0> Math.sqrt(-2)
Traceback (most recent call last):
6: from /usr/local/bin/irb:23:in `<main>'
4: from /var/lib/gems/2.5.0/gems/irb-1.1.0/exe/irb:11:in `<top (required)>'
3: from (irb):1
2: from (irb):2:in `rescue in irb_binding'
1: from (irb):2:in `sqrt'
Math::DomainError (Numerical argument is out of domain - "sqrt")
``````

An `ArgumentError` is returned if the given number of parameters is different than 1, since it is expected 1 parameter.

``````irb(main):010:0> Integer.sqrt
Traceback (most recent call last):
6: from /usr/local/bin/irb:23:in `<main>'
4: from /var/lib/gems/2.5.0/gems/irb-1.1.0/exe/irb:11:in `<top (required)>'
3: from (irb):9
2: from (irb):10:in `rescue in irb_binding'
1: from (irb):10:in `sqrt'
ArgumentError (wrong number of arguments (given 0, expected 1))
irb(main):011:0> Math.sqrt
Traceback (most recent call last):
6: from /usr/local/bin/irb:23:in `<main>'
4: from /var/lib/gems/2.5.0/gems/irb-1.1.0/exe/irb:11:in `<top (required)>'
3: from (irb):10
2: from (irb):11:in `rescue in irb_binding'
1: from (irb):11:in `sqrt'
ArgumentError (wrong number of arguments (given 0, expected 1))
``````

## Return value

The `Integer.sqrt()` returns the integer square root of the non-negative integer parameter, so, as an example, the largest non-negative integer square root of 5 is 2. The method returns the largest integer number.

``````irb(main):001:0> Integer.sqrt(1)
=> 1
irb(main):002:0> Integer.sqrt(2)
=> 1
irb(main):003:0> Integer.sqrt(3)
=> 1
irb(main):004:0> Integer.sqrt(4)
=> 2
irb(main):005:0> Integer.sqrt(5)
=> 2
``````

The square root of 2 is 1.4142135623730951, but this is not an integer number, so, the `Integer class` is going to treat it as an integer, it returns the number 1.

The `Math.sqrt()` is able to return a float value.

``````irb(main):006:0> Math.sqrt(1)
=> 1.0
irb(main):007:0> Math.sqrt(2)
=> 1.4142135623730951
irb(main):008:0> Math.sqrt(3)
=> 1.7320508075688772
irb(main):009:0> Math.sqrt(4)
=> 2.0
``````

## Conclusion

That's all for today. Let me know if you have any questions.