169 похожих чатов

Var prod: uint64 = 1 echo "Product numbers 1-25:" for num2 in

1'u64 .. 25'u64 :
prod = prod * num2

echo prod

возвращает
Product numbers 1-25:
7034535277573963776

что не есть тру, ибо
fact(N) -> fact(N, 1).
fact(0, A) -> A;
fact(N, A) when N > 0 -> fact(N - 1, N * A).
> test1:fact(25).
15511210043330985984000000

____________________

var prod: uint64 = 1
echo "Product numbers 1-100:"

for num2 in 1'u64 .. 100'u64 :
prod = prod * num2

echo prod

будет
Product numbers 1-100:
0

___________________________

если сигнед
var prod: int64 = 1
echo "Product numbers 1-100:"

for num2 in 1'i64 .. 100'i64 :
prod = prod * num2

echo prod

будет рантайм падение
Product numbers 1-100:
fatal.nim(53) sysFatal
Error: unhandled exception: over- or underflow [OverflowDefect]
_______________

шо не так с Nim?))
почему всегда разное поведение?

8 ответов

16 просмотров
Taras 🦀-Taraskin Автор вопроса

Стикер

У тебя исключение оверфлоу/андерфлоу свалилось только для типа int64 - знаковое целое длиной 63 бита + 1 бит знака. На типе uint64 - беззнаковое целое длиной 64 бита исключения небыло и не должно было быть, т.к. в этом типе переполнение не предусмотрено.

Taras 🦀-Taraskin Автор вопроса
Vladimir Berezenko
У тебя исключение оверфлоу/андерфлоу свалилось тол...

ну исключения небыло — небыло падения в рантайме, ок но есть два результата, которые не равны правильным-ожидаемым — 0 и число, меньшее за реальный результат это же тоже оверфлоу, или как это зовется то?

Taras 🦀 Taraskin
ну исключения небыло — небыло падения в рантайме, ...

ну да, у тебя переполнение 64 бит не хватает

Taras 🦀 Taraskin
ну исключения небыло — небыло падения в рантайме, ...

Блин, ты изучи что такое int64 и uin64 и почему там цифра 64 стоит. А есть ещё int32, int16 и int8 и их беззнаковые варианты. И удивляться почему я пихаю число 255 в int8, а получаю почему-то -127 ты более не будешь.

Vladimir Berezenko
Блин, ты изучи что такое int64 и uin64 и почему та...

надо еще суметь запихнуть, компилятор просто так не даст

Taras 🦀-Taraskin Автор вопроса
Vladimir Berezenko
Блин, ты изучи что такое int64 и uin64 и почему та...

да знаю) просто удивило, что проведение разное

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта