Итак, я использовал скорость света c
, чтобы сделать некоторые вычисления в VScode, и я нашел это:
julia> c = 3*10^8
300000000
julia> c^3
-1238598680542445568
Это явно неправильно. Но если я определяю c как число с плавающей запятой:
julia> c = 3.0*10^8
3.0e8
julia> c^3
2.7e25
Тогда все хорошо. Что происходит? Это какая-то врожденная ошибка Джулии или я задаю какой-то глупый вопрос?
Используйте BigInt
для этого, так как целые числа в Джулии обычно 64-битные:
julia> c = big(3*10^8)
300000000
julia> typeof(c)
BigInt
julia> c^3
27000000000000000000000000
Это поведение переполнения типа int
julia> x = typemax(Int64)
9223372036854775807
julia> x + 1
-9223372036854775808
julia> x + 1 == typemin(Int64)
true
Хотя числа с плавающей запятой не являются точными значениями, и они обрабатывают мантиссу и экспоненту отдельно, поэтому они могут возвращать правильные ответы даже для вычислений большого порядка.