thedeemon: (faculty of numbers)
[personal profile] thedeemon
Говорили, на ноль нельзя делить, а вот британские учоные научились! Берешь хаскель и делишь себе, получаешь конкретные числа:
Prelude> floor (1/0)
179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216


Для 1, -1 и 0 ответы разные выходят.

Date: 2016-05-05 02:59 am (UTC)
From: [identity profile] perdakot.livejournal.com

Я же говорил (про скалу), что встроенная длинная арифметика может оказаться не очень длинной или не очень целой. Не поверили.

Date: 2016-05-05 03:12 am (UTC)
From: [identity profile] juan-gandhi.livejournal.com
scala> 1/0
java.lang.ArithmeticException: / by zero

Date: 2016-05-05 03:15 am (UTC)
From: [identity profile] perdakot.livejournal.com
Это ничего не меняет. С 1 рабоает, а с 19 нет. Или 137.

Date: 2016-05-05 10:42 am (UTC)
From: [identity profile] clayrat.livejournal.com
scala> 19/0
java.lang.ArithmeticException: / by zero

scala> 137/0
java.lang.ArithmeticException: / by zero

Date: 2016-05-05 03:37 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Ну, тут с длиной нет проблемы, это число можно умножить и в квадрат возвести и дальше увеличивать. Тут чисто вопрос конверсии NaN в целое.

Date: 2016-05-05 04:03 am (UTC)
From: [identity profile] binf.livejournal.com
Тут вопрос такой - wtf не кидается эексепшн в (1/0) ?

Date: 2016-05-05 05:13 am (UTC)
From: [identity profile] perdakot.livejournal.com

Не должно быть эксцепшона, операция деления должна возвращать Value a | DivizionByZero, но в оркестре что-то пошло не так.

Date: 2016-05-05 06:24 am (UTC)
From: [identity profile] binf.livejournal.com
тут вопрос религиозный - эксепшн, спец тип для каждой функции или Maybe, смотря кто на что онанирует. Но возвращать NaN - это уже тупость какая-то запредельная

Date: 2016-05-05 07:17 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
ну так наличие NaN и есть признак, что Float на самом деле Maybe Float, или еще лучше Either NaN FiniteFloat

Date: 2016-05-05 10:03 am (UTC)
From: [identity profile] binf.livejournal.com
Нет, NaN и Maybe float абсолютно разные по семантике. Тут смысл, что деление на ноль может быть Maybe float если насрать на перформанс, но не NaN

Date: 2016-05-05 12:34 pm (UTC)
From: [identity profile] sassa-nf.livejournal.com
нет, они абсолютно идентичные по семантике. Как только у вас в коде или хардвере появляется ветвление, у вас появляется Bool = Maybe () = Either () ().

Date: 2016-05-05 03:12 am (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Поздравляю!

Date: 2016-05-05 04:49 am (UTC)
From: [identity profile] helvegr.livejournal.com
https://ghc.haskell.org/trac/ghc/ticket/3070

Date: 2016-05-05 07:15 am (UTC)
From: [identity profile] sassa-nf.livejournal.com
ну так сколько лет тому тикету!

Date: 2016-05-05 06:14 am (UTC)
From: [identity profile] jamhed.livejournal.com
Теперь благодаря британским ученым мы точно знаем что такое over 9000.

Date: 2016-05-05 08:19 am (UTC)
From: [identity profile] zerthurd.livejournal.com
Очередное доказательство преимущества х-я над убогими недоязычками

Date: 2016-05-05 09:42 am (UTC)
wizzard: (Default)
From: [personal profile] wizzard
а откуда эта чудесная картинка о faculty of numbers?

Date: 2016-05-05 09:43 am (UTC)
From: [identity profile] maxim.livejournal.com
$ ghci
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
Prelude> 1/0
Infinity


floor просто неправильный :-)
Edited Date: 2016-05-05 09:44 am (UTC)

Date: 2016-05-05 10:16 am (UTC)
From: [identity profile] nivanych.livejournal.com
А вот для 1/0, 10/0, 100/0 и 1000/0 одинаковые получаются.

Date: 2016-05-05 10:23 am (UTC)
From: [identity profile] thedeemon.livejournal.com
совпадение!

Date: 2016-05-05 12:18 pm (UTC)
From: [identity profile] soonts.livejournal.com
Интересно, из каких соображений афтары проигнорировали проверенный десятилетиями IEEE 754?

Date: 2016-05-05 02:21 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
А они не проигнорировали. 1 / 0 в примере реализован по IEEE754 и работает честно.

floor же не округляет float point до другого float point в рамках IEEE754, это конверсия float point в длинное целое. И она работает в этом случае неправильно.

Date: 2016-12-24 03:57 pm (UTC)
From: [identity profile] vanja-y.livejournal.com
Забавно, что floor(0/0) и floor(-0/0) дают противоположные по знаку результаты)

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 25th, 2026 10:32 pm
Powered by Dreamwidth Studios