var() is not equal to sd()^2 in R Mathematically, it is evident that var = sd^2 (or var^0.5 = sd), but R seems to answer TRUE for the latter and FALSE for the former.
To my knowledge, both var() and sd() function use n-1 for degree of freedom.
What would be the problem?
data <- c(20, 20, 30, 20, 16, 13, 20)

var(data)^0.5 == sd(data)
var(data) == sd(data)^2

 A: Correct to 14 decimal points, it's a floating point number issue:
options(digits = 20)
> var(data)
[1] 27.476190476190474499
sd(data)^2
[1] 27.476190476190470946

A: Check the differences between those quantities. They are likely to be small.
Computers are funky about how they store long decimals.
A: Please, check
0.4^2 == 0.16
0.4 == 0.16^0.5

It's not a statistical issue. It's a rounding issue in floating point arithmetics in the language.
The same applies to Python
0.4**2 == 0.16
0.4 == 0.16**0.5

None of these floating point numbers is stored in a computer's memory as two- or three-decimal digits, but rather in a binary format.
For instance, 0.16 (8-byte) is stored as 11111111000100011110101110000101000111101011100001010001111011, while 0.4**2 gives us 11111111000100011110101110000101000111101011100001010001111100.
You can play with this decimal to binary conversion using the following Python code:
import struct
bin(struct.unpack('!Q',struct.pack('!d',0.16))[0])
bin(struct.unpack('!Q',struct.pack('!d',0.4**2))[0])

A: Recommended read for you is

Goldberg, D. (1991). What every computer scientist should know about
floating-point arithmetic. ACM computing surveys (CSUR), 23(1),
5-48.

TL;DR you should never use == (or its equivalent in any other programming language) to compare floating point numbers because they represent numbers only approximately. As in your example, two different computations can lead to floating point representations that are different though close enough given the guarantees given by such representation. What you should do instead is to compare them with some precision, e.g. $|x - y| < \epsilon$, but this is also not a perfect solution and there are better ones. Happily, in most cases, they would be already implemented for you in the programming language you are using (like the mentioned all.equal in R).
