# The value of one when using pi and E

When using \pi or \euler with the function one the value is the boolean value: true rather than 1.0. For other irrational values like sqrt(2) the value is 1.0 as it should be. Why is this?

While \sqrt{2} is not rational, sqrt(2) is a floating-point number, thus rational.

Why?

1 Like

Yes, I realized after I typed it that sqrt(2) is not irrational in the language. I did an @code_llvm on the call for pi and it seems it is making a distinction between Floats and irrational numbers. But why is this?

true in Julia is numerically equal to 1. It is the most â€śbasicâ€ť multiplicative identity the sense that multiplying by any other type will up-promote to the precision of the larger type:

julia> true * 1 # returns Int
1

julia> true * 1.0 # returns Float64
1.0

julia> true * 1.0f0 # returns Float32
1.0f0


I think it is returned as the multiplicative identity for Irrational constants because weâ€™re not sure what other type of 1 to return in that case.

Whereas 1.0 is a Float64 value. This is the multiplicative identity for Float64 types, but you wouldnâ€™t want to use it for arbitrary types because it will cause type promotion to Float64:

julia> 1.0 * 3 # promotes Int to Float64
3.0

julia> 1.0 * 3.0f0 # promotes Float32 to Float64
3.0

2 Likes

Thank you, that makes sense.

1 Like