Jump to content

НЭН

(Перенаправлено с Не номер )

В вычислениях ), которое не определено как число , NaN ( / n æ n / ), обозначающий не число , представляет собой конкретное значение числового типа данных (часто число с плавающей запятой например, результат 0/0. . Систематическое использование NaN было введено стандартом IEEE 754 для чисел с плавающей запятой в 1985 году, наряду с представлением других неконечных величин, таких как бесконечности .

В математике результат 0/0 обычно не определяется как число. [ а ] и поэтому может быть представлен NaN в вычислительных системах.

Квадратный корень отрицательного числа не является действительным числом и поэтому также представляется как NaN в совместимых вычислительных системах. NaN также можно использовать для представления пропущенных значений в вычислениях. [ 1 ] [ 2 ]

Предусмотрено два отдельных типа NaN: тихие NaN и сигнальные NaN . Тихие NaN используются для распространения ошибок, возникающих в результате недопустимых операций или значений. Сигнальные NaN могут поддерживать расширенные функции, такие как смешивание числовых и символьных вычислений или другие расширения базовой арифметики с плавающей запятой.

Плавающая точка

[ редактировать ]

В вычислениях с плавающей запятой NaN — это не то же самое, что infinity , хотя оба обычно обрабатываются как особые случаи в представлениях действительных чисел с плавающей запятой, а также в операциях с плавающей запятой. Недопустимая операция также не то же самое, что арифметическое переполнение (которое возвращает бесконечность или наибольшее конечное число по величине) или арифметическое опустошение (которое возвращает наименьшее нормальное число по величине, субнормальное число или ноль ).

IEEE 754 NaN кодируются с помощью поля экспоненты, заполненного единицами (например, значения бесконечности), и некоторым ненулевым числом в поле мантиссы (чтобы отличать их от значений бесконечности); это позволяет определять несколько различных значений NaN в зависимости от того, какие биты установлены в поле мантиссы, а также от значения ведущего бита знака (но приложения не обязаны предоставлять отдельную семантику для этих различных значений NaN).

Например, NaN одинарной точности (32 бита) IEEE 754 будет закодирован как

s111 1111 1xxx xxxx xxxx xxxx xxxx xxxx

где s — знак (чаще всего игнорируется в приложениях), а последовательность x представляет собой ненулевое число (нулевое значение кодирует бесконечность). старший бит из x На практике для определения типа NaN используется : « тихий NaN » или « сигнальный NaN » (подробности см. в разделе «Кодирование »). Остальные биты кодируют полезную нагрузку (чаще всего игнорируемую в приложениях).

Операции с плавающей запятой, отличные от упорядоченных сравнений, обычно передают тихое значение NaN ( qNaN ). Большинство операций с плавающей запятой в сигнальном NaN ( sNaN недопустимой операции ) сигнализируют об исключении ; действие исключения по умолчанию в этом случае такое же, как и для операндов qNaN, и они создают qNaN, если выдают результат с плавающей запятой.

Распространение «тихих» NaN посредством арифметических операций позволяет обнаруживать ошибки в конце последовательности операций без тщательного тестирования на промежуточных этапах. Например, если кто-то начинает с NaN и добавляет 1 пять раз подряд, каждое сложение приводит к NaN, но нет необходимости проверять каждое вычисление, поскольку можно просто отметить, что окончательным результатом будет NaN. Однако, в зависимости от языка и функции, NaN можно незаметно удалить из цепочки вычислений, где одно вычисление в цепочке даст постоянный результат для всех остальных значений с плавающей запятой. Например, расчет x 0 может дать результат 1, даже если x равно NaN, поэтому проверка только окончательного результата скроет тот факт, что вычисление до x 0 привел к NaN. более поздняя проверка на установленный недопустимый флаг, чтобы обнаружить все случаи, когда вводятся NaN. В общем, необходима [ 3 ] (более подробную информацию см. в определении функции ниже).

В разделе 6.2 старого стандарта IEEE 754-2008 есть две аномальные функции ( maxNum и minNum функции, которые возвращают максимум и минимум соответственно двух операндов, которые, как ожидается, будут числами), которые предпочитают числа — если только один из операндов является NaN, то возвращается значение другого операнда. Версия IEEE 754-2019 заменила эти функции, поскольку они не являются ассоциативными (когда в операнде появляется сигнальный NaN). [ 4 ] [ 5 ]

Сравнение с NaN

[ редактировать ]

Сравнения определены стандартом IEEE 754, чтобы учитывать возможные операнды NaN. [ 6 ] При сравнении двух действительных чисел или расширенных действительных чисел (как в форматах с плавающей запятой IEEE 754) первое число может быть меньше, равно или больше второго числа. Это дает три возможных отношения. Но когда хотя бы один операнд сравнения имеет значение NaN, эта трихотомия не применяется, и необходимо четвертое отношение: unordered . В частности, два значения NaN сравниваются как неупорядоченные, а не как равные.

Как указано, предикаты, связанные с математическими символами <, ≤, =, ≥, > (или эквивалентными обозначениями в языках программирования), возвращают значение false в неупорядоченном отношении. Так, например, NOT ( x < y ) логически не эквивалентен x y : в неупорядоченном виде, т. е. когда x или y имеет значение NaN, первый возвращает true, а второй возвращает false. Однако ≠ определяется как отрицание =, поэтому он возвращает true в неупорядоченном виде.

Сравнение NaN с любым значением с плавающей запятой x
(включая NaN и ±∞)
Сравнение NaN ≥ х NaN ≤ х НЭН > х НЭН < х НЭН = х НЭН ≠ х
Результат ЛОЖЬ ЛОЖЬ ЛОЖЬ ЛОЖЬ ЛОЖЬ Истинный

Из этих правил сравнение x с самим собой, x x или x = x можно использовать , чтобы проверить, является ли x NaN или не-NaN.

Предикаты сравнения либо сигнализируют, либо не сигнализируют о молчащих операндах NaN; недопустимой операции версии сигнализации сигнализируют об исключении для таких сравнений (т. е. по умолчанию это просто устанавливает соответствующий флаг состояния в дополнение к поведению версий без сигнализации). Предикаты равенства и неравенства не передают сигналы. Все другие стандартные предикаты сравнения, связанные с вышеупомянутыми математическими символами, сигнализируют, если они получают операнд NaN. Стандарт также предоставляет несигнальные версии этих других предикатов. Предикат isNaN(x) определяет, является ли значение NaN, и никогда не сигнализирует об исключении, даже если x является сигнальным NaN.

Стандарт IEEE для чисел с плавающей запятой требует, чтобы NaN ≠ NaN сохранялось. Напротив, частный стандарт позиционной арифметики 2022 года имеет аналогичную концепцию NaR (Not a Real), где NaR = NaR . выполняется [ 7 ]

Операции, генерирующие NaN

[ редактировать ]

Существует три типа операций, которые могут возвращать NaN: [ 8 ]

  • Большинство операций с хотя бы одним операндом NaN.
  • Неопределенные формы :
    • Деления (±0)/(±0) и (±∞)/(±∞) .
    • Умножения (±0) × (±∞) и (±∞) × (±0) .
    • Остаток x % y , когда x — бесконечность или y — ноль.
    • Сложения (+∞) + (−∞) , (−∞) + (+∞) и эквивалентные вычитания (+∞) − (+∞) и (−∞) − (−∞) .
    • В стандарте предусмотрены альтернативные функции полномочий:
      • Стандарт pow функция и целочисленный показатель степени pown функция определяет 0 0 , 1 , и 0 как 1 .
      • The powr Функция определяет все три неопределенные формы как недопустимые операции и поэтому возвращает NaN.
  • Реальные операции со сложными результатами, например:

NaN также могут быть явно присвоены переменным, обычно как представление отсутствующих значений. До появления стандарта IEEE программисты часто использовали специальное значение (например, -99999999) для обозначения неопределенных или отсутствующих значений, но не было никакой гарантии, что они будут обрабатываться последовательно и правильно. [ 1 ]

NaN не обязательно генерируются во всех вышеперечисленных случаях. Если операция может создать условие исключения и ловушки не маскируются, то вместо этого операция вызовет ловушку. [ 9 ] Если операнд представляет собой тихий NaN, а сигнальный операнд NaN отсутствует, то условие исключения отсутствует и результатом является тихий NaN. Явное присвоение не вызовет исключения даже для сигнальных NaN.

Тихий НЭН

[ редактировать ]

В общем, тихие NaN или qNaN не вызывают никаких дополнительных исключений, поскольку они распространяются через большинство операций. недопустимой операции Но об исключении сигнализируют некоторые операции, которые не возвращают значение с плавающей запятой, например преобразования формата или некоторые операции сравнения.

Сигнализация NaN

[ редактировать ]

Сигнальные NaN, или sNaN, представляют собой специальные формы NaN, которые при использовании большинством операций должны вызывать исключение недопустимой операции, а затем, при необходимости, «выключаться» в qNaN, который затем может распространяться. Они были представлены в IEEE 754 . Было несколько идей, как их можно использовать:

  • Заполнение неинициализированной памяти сигнальными NaN приведет к исключению недопустимой операции, если данные используются до их инициализации.
  • Использование sNaN в качестве заполнителя для более сложного объекта , например:

При обнаружении обработчик ловушки может декодировать sNaN и вернуть индекс вычисленного результата. На практике этот подход сталкивается со многими сложностями. Обработка знакового бита NaN для некоторых простых операций (таких как абсолютное значение ) отличается от обработки арифметических операций. Ловушки не требуются по стандарту. Существуют и другие подходы к такого рода проблемам, которые были бы более переносимыми. [ нужна ссылка ]

Операции с полезной нагрузкой

[ редактировать ]

операции getPayload , setPayload и setPayloadSignaling . IEEE 754-2019 рекомендует реализовать [ 10 ] стандартизация доступа к полезным нагрузкам для оптимизации использования приложений. [ 11 ] Согласно справочному документу IEEE 754-2019, эту рекомендацию следует интерпретировать как «требующуюся для новых реализаций с оговоркой для обратной совместимости». [ 12 ]

Кодирование

[ редактировать ]

В форматах обмена IEEE 754 NaN идентифицируются с помощью определенных заранее определенных битовых комбинаций, уникальных для NaN. Знаковый бит не имеет значения. NaN в двоичном формате представлены экспоненциальным полем, заполненным единицами (например, значениями бесконечности), и некоторым ненулевым числом в поле мантиссы (чтобы отличать их от значений бесконечности). Исходный стандарт IEEE 754 1985 года ( IEEE 754-1985 ) описывал только двоичные форматы с плавающей запятой и не определял, как должно быть помечено состояние сигнализации/молчания. На практике наиболее значимый бит поля мантиссы определяет, является ли NaN сигнальным или тихим. В результате получились две разные реализации с обратным значением:

Первый выбор был предпочтительнее, поскольку он позволяет реализации заглушить сигнальный NaN, просто установив бит сигнализации/молчания в 1. При втором выборе обратное невозможно, поскольку установка бита сигнализации/тихохода в 0 может привести к бесконечности. [ 13 ]

Редакции стандарта IEEE 754 2008 и 2019 годов содержат формальные требования и рекомендации по кодированию состояния сигнализации/молчания.

  • Для форматов двоичного обмена старший бит поля мантиссы используется исключительно для различения тихих и сигнальных NaN. [ 14 ] (Это требование было добавлено в редакцию 2019 года.) Более того, оно должно быть is_quiet флаг. [ 15 ] То есть этот бит не равен нулю, если NaN находится в тихом состоянии, и равен нулю, если NaN сигнализирует.
  • Для десятичных форматов обмена, как в двоичном, так и в десятичном кодировании, NaN идентифицируется по тому, что верхние пять битов поля комбинации после знакового бита установлены в единицы. Шестой бит поля — это is_signaling флаг. То есть этот бит равен нулю, если NaN находится в тихом состоянии, и ненулевому, если NaN сигнализирует. [ 16 ]

Для соответствия стандарту IEEE 754-2008 значение бита сигнализации/молчания в последних процессорах MIPS теперь можно настраивать через поле NAN2008 регистра FCSR. Эта поддержка является необязательной в MIPS Release 3 и обязательной в Release 5. [ 17 ]

Состояние/значение остальных бит поля мантиссы не определяется стандартом. Это значение называется «полезной нагрузкой» NaN. Если операция имеет один входной NaN и передает его на выход, полезная нагрузка результата NaN должна быть такой же, как у входного NaN (это не всегда возможно для двоичных форматов, когда состояние сигнализации/молчания кодируется is_signaling флаг, как описано выше). Если имеется несколько входных значений NaN, полезная нагрузка результата NaN должна быть взята из одного из входных NaN; стандарт не указывает, какие именно.

Канонический NaN

[ редактировать ]

В ряде систем используется концепция «канонического NaN», где одно конкретное значение NaN выбирается как единственно возможное qNaN, генерируемое операциями с плавающей запятой, не имеющими входного значения NaN. Обычно выбирается тихое значение NaN с нулевой полезной нагрузкой и произвольно определяемым знаковым битом.

  • В RISC-V операции с плавающей запятой генерируют только каноническое значение NaN, даже если в качестве операнда указано значение NaN (полезная нагрузка не распространяется). [ 18 ] [ б ] Для такого поведения ARM может включить режим NaN по умолчанию. [ 20 ] WebAssembly ведет себя так же, хотя допускает два канонических значения. [ 21 ]
  • Ряд языков не различают разные значения NaN, не требуя, чтобы их реализации принудительно использовали определенное значение NaN. ECMAScript (JavaScript) обрабатывает все NaN, как если бы они имели одно и то же значение. [ 21 ] Java имеет такое же отношение «по большей части». [ 22 ]

Использование ограниченного количества представлений NaN позволяет системе использовать другие возможные значения NaN для неарифметических целей, наиболее важным из которых является «NaN-бокс», то есть использование полезных данных для произвольных данных. [ 23 ] (Эта концепция «канонического NaN» не совпадает с концепцией «канонического кодирования» в IEEE 754.)

Определение функции

[ редактировать ]

Существуют разногласия по поводу правильного определения результата числовой функции , которая получает на вход тихое число NaN. Одна точка зрения состоит в том, что NaN должен распространяться на выход функции во всех случаях, чтобы распространять указание на ошибку. Другая точка зрения, принятая стандартами ISO C99 и IEEE 754-2008 в целом, заключается в том, что если функция имеет несколько аргументов и выходные данные однозначно определяются всеми входными данными, отличными от NaN (включая бесконечность), то это значение должно быть результатом. Так, например, значение, возвращаемое hypot(±∞, qNaN) и hypot(qNaN, ±∞) +∞.

Особенно остро проблема стоит для возведения в степень функции pow(x, y) = х и . Выражения 0 0 , ∞ 0 и 1 считаются неопределенными формами , когда они встречаются в виде пределов (точно так же, как ∞ × 0), и вопрос о том, следует ли определять ноль в нулевой степени как 1, разделил мнения.

Если выход считается неопределенным, когда параметр не определен, то pow(1, qNaN) должен создать qNaN. Однако математические библиотеки обычно возвращают 1 вместо pow(1, y) для любого действительного числа y , и даже если y равно бесконечности . Аналогично, они производят 1 за pow(x, 0) даже когда x равен 0 или бесконечности. Обоснованием возврата значения 1 для неопределенных форм было то, что значение функции в особых точках может быть принято как конкретное значение, если это значение находится в пределе значения [ нужны разъяснения ] для всех, кроме исчезающе малой части шара вблизи предельного значения параметров. [ нужна ссылка ] Версия стандарта IEEE 754 2008 года гласит, что pow(1, qNaN) и pow(qNaN, 0) оба должны возвращать 1, поскольку они возвращают 1 независимо от того, что используется вместо тихого NaN. Более того, ISO C99, а затем и IEEE 754-2008, решили указать pow(−1, ±∞) = 1 вместо qNaN; причина этого выбора указана в обосновании C: [ 24 ] «Как правило, C99 избегает результата NaN, где полезно числовое значение. ... Результат pow(−2, ∞) равно +∞, поскольку все большие положительные значения с плавающей запятой являются четными целыми числами».

Чтобы удовлетворить тех, кто желает более строгой интерпретации того, как должна действовать степенная функция, стандарт 2008 года определяет две дополнительные степенные функции: pown(x, n), где показатель степени должен быть целым числом, и powr(x, y), который возвращает NaN всякий раз, когда параметр имеет значение NaN или возведение в степень дает неопределенную форму .

Целое число NaN

[ редактировать ]

форматов фиксированного размера Большинство целочисленных не могут явно указывать недопустимые данные. В таком случае при преобразовании NaN в целочисленный тип стандарт IEEE 754 недопустимой операции об исключении требует сигнализации . Например, в Java такие операции создают экземпляры java.lang.ArithmeticException. [ 25 ] В C они приводят к неопределенному поведению , но если поддерживается приложение F, операция выдает «недопустимое» исключение с плавающей запятой (как того требует стандарт IEEE) и неопределенное значение.

Перл Math::BigInt пакет использует «NaN» для результата строк, которые не представляют собой допустимые целые числа. [ 26 ]

> perl -mMath::BigInt -e "print Math::BigInt->new('foo')"
NaN

Отображать

[ редактировать ]

Различные операционные системы и языки программирования могут иметь разные строковые представления NaN.

nan (C, C++, Python)
NaN (ECMAScript, Rust, C#, Julia). Julia may show alternative NaN, depending on precision, NaN32, and NaN16; NaN is for Float64 type.
NaN% 
NAN (C, C++, Rust)
NaNQ (IBM XL and AIX: Fortran, C++ proposal n2290)
NaNS (ditto)
qNaN
sNaN
1.#SNAN (Excel)
1.#QNAN (Excel)
-1.#IND (Excel)
+nan.0 (Scheme)

Поскольку на практике закодированные NaN имеют знак, бит молчания/сигнализации и дополнительную «диагностическую информацию» (иногда называемую полезной нагрузкой ), их иногда можно найти и в строковых представлениях NaN. Некоторые примеры:

  • Для языков C и C++ знаковый бит всегда отображается функциями стандартной библиотеки (например, -nan), когда он присутствует. Не существует стандартного отображения полезной нагрузки и состояния сигнализации, но тихое значение NaN конкретной полезной нагрузки может быть создано путем предоставления строки nan(char-sequence) в функцию анализа чисел (например, strtod) или предоставив строку последовательности символов для nan() (или nans() для sNaN), оба интерпретируются способом, определяемым реализацией.
    • GCC и LLVM предоставляют встроенные реализации nan() и nans(). Они анализируют последовательность символов как целое число для strtoull (или эквивалент другого размера) с обнаружением целочисленных оснований.
    • строку последовательности Парсер с плавающей запятой библиотеки GNU C использует символов «каким-то неопределенным образом». [ 27 ] На практике этот анализ эквивалентен анализу GCC/LLVM для полезной нагрузки до 64 бит.
    • Newlib не реализует nan() разбор, но strtod() принимает шестнадцатеричный формат без префикса.
    • musl не реализует анализ полезной нагрузки.

Не все языки допускают существование нескольких NaN. Например, ECMAScript повсюду использует только одно значение NaN.

Примечания

[ редактировать ]
  1. ^ 0/0 не определено как число как в системе действительных чисел , так и в расширенной системе действительных чисел , в то время как 1/±0, например, может быть последовательно присвоено значение ±∞ в последней системе, предполагая нуль со знаком .
  2. ^ IEEE 754-2008 рекомендует, но не требует распространения полезной нагрузки NaN. Большинство процессоров предпочитают следовать этой рекомендации, но сами по себе не генерируют ненулевую полезную нагрузку. [ 19 ] Таким образом, поведение RISC-V не рекомендуется, но соответствует требованиям.
  1. ^ Перейти обратно: а б Боуман, Кеннет (2006). Введение в программирование с помощью IDL: интерактивный язык данных . Академическая пресса. п. 26 . ISBN  978-0-12-088559-6 .
  2. ^ Пресс, Уильям Х.; Теукольский, Саул А.; Веттерлинг, Уильям Т.; Фланнери, Брайан П. (2007). Численные рецепты: искусство научных вычислений . Издательство Кембриджского университета. п. 34 . ISBN  978-0-521-88068-8 .
  3. ^ Уильям Кахан (1 октября 1997 г.). «Конспекты лекций о статусе стандарта IEEE 754 для двоичной арифметики с плавающей запятой» (PDF) .
  4. ^ Дэвид Х.К. Чен (21 февраля 2017 г.). «Удаление/понижение статуса операций MinNum и MaxNum из IEEE 754-2018» (PDF) . Проверено 6 мая 2019 г.
  5. ^ «754р минут» . 19 мая 2017 года . Проверено 25 июня 2017 г.
  6. ^ IEEE 754 2019 , §5.11
  7. ^ Стандарт для положительной арифметики (2022 г.)
  8. ^ Дэвид Голдберг (1991). «Что должен знать каждый ученый-компьютерщик о числах с плавающей запятой» .
  9. ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 1: Базовая архитектура» . Апрель 2008 г., стр. 118–125, 266–267, 334–335.
  10. ^ IEEE 754 2019 , §9.7
  11. ^ «Справочное обсуждение новых функций полезной нагрузки» .
  12. ^ «Пересмотр стандарта IEEE для арифметики с плавающей запятой выйдет в 2019 году» (PDF) .
  13. ^ «Re: (длинно) SNANS – это не то, чем они могли бы быть…» IEEE . 15 октября 2010 года . Проверено 5 ноября 2020 г.
  14. ^ IEEE 754 2019 , §3.4
  15. ^ IEEE 754 2019 , §6.2.1
  16. ^ IEEE 754 2019 , §3.5.2
  17. ^ «Архитектура MIPS для программистов - Том IA: Введение в архитектуру MIPS64» (PDF) . MIPS Technologies, Inc. 20 ноября 2013 г. с. 79 . Проверено 27 сентября 2017 г.
  18. ^ Эмбеддев, Пять. « Стандартное расширение «F» для чисел с плавающей запятой одинарной точности, версия 2.2 / Руководство по набору команд RISC-V, том I: ISA уровня пользователя RISC-V» . Пять EmbedDev .
  19. ^
  20. ^ «Обработка NaN и NaN по умолчанию (Справочное руководство по архитектуре ARM, версии ARMv7-A и ARMv7-R)» . Документация — Arm Developer .
  21. ^ Перейти обратно: а б «Какова мотивация канонизации NaN? · Проблема № 1463 · WebAssembly/design» . Гитхаб . - см. ответ Дэна Гохмана «sunfishcode».
  22. ^ «Глава 4. Типы, значения и переменные» . docs.oracle.com . По большей части платформа Java SE обрабатывает значения NaN данного типа как свернутые в одно каноническое значение, и, следовательно, эта спецификация обычно относится к произвольному NaN как к каноническому значению.
  23. ^ Нистром, Роберт (28 июля 2021 г.). «§ 30.3 Упаковка NaN». Создание переводчиков . Женевер Беннинг. ISBN  978-0-9905829-3-9 .
  24. ^ «Обоснование международного стандарта — Языки программирования — C, версия 5.10» (PDF) . Апрель 2003. с. 180.
  25. ^ «ArithmeticException (платформа Java SE 8)» . docs.oracle.com .
  26. ^ " Math::BigInt" .perldoc.perl.org 2015 . Проверено 12 июня года .
  27. ^ «Разбор чисел с плавающей запятой (Библиотека GNU C)» . www.gnu.org . Проверено 9 сентября 2021 г. Если указаны символы… , они используются каким-то неопределённым образом для выбора конкретного представления NaN (их может быть несколько).

Стандарты

[ редактировать ]
[ редактировать ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 17480bac71dbe7eaf96563e54c66224d__1722389340
URL1:https://arc.ask3.ru/arc/aa/17/4d/17480bac71dbe7eaf96563e54c66224d.html
Заголовок, (Title) документа по адресу, URL1:
NaN - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)