Делим на 0

Тема в разделе "Arduino & Shields", создана пользователем Рязанский_Ардуинщик, 9 дек 2016.

  1. Onkel

    Onkel Гуру

    Ну то что вы пишете - это запросто может быть бредом, я же привел выражения из мат. анализа и проективной геометрии. Да, а стандарт ieeу 754-2008 для вас тоже является
    ?
    https://ru.wikipedia.org/wiki/IEEE_754-2008
     
  2. Onkel

    Onkel Гуру

    Ага. Вы только что опровергли выражения из матана, проективной топологии и даже стандарт формата представления чисел float? Очень ваши "опровержения" напоминают сюжет из "Срезал" Шукшина.
     
  3. Airbus

    Airbus Радиохулиган Модератор

    Ух нифига се как тема то пошла!3 страница.Видимо действительно жизненный Вопрос?А что в Порт летит после деления на ноль?
     
    Рязанский_Ардуинщик нравится это.
  4. Onkel

    Onkel Гуру

    "Стандартная арифметика с плавающей запятой (IEEE 754-2008) содержит особые значения для +∞ и −∞ : порядок состоит из одних единиц (11…11), мантисса из одних нулей (00…00). Положительная бесконечность больше любого конечного числа, отрицательная — меньше любого."
    Стандарт 754-2008 у нас эту бесконечность видите как прописывает. Так что можно объявить массив unsigned char , записать туда порядок 11..11 и 000...., у нас будет записана ∞ потом по указателю на сhar считать как float и посмотреть. Зависит от компилятора. Но в сравнениях бесконечность можно использовать, число как число.
     
  5. erinaceto

    erinaceto Нуб

    Что-то тут про математику, про стандарты. Вопрос же сформулирован именно про платформу ардуино.
    Отсюда два в вопроса, 1) реализован ли данный стандарт на ардуино
    и, более интересно, 2) что будет при 1/0? Это ведь целочисленная арифметика.
     
  6. DetSimen

    DetSimen Guest

    что мешает написать и проверить?
    только отойти подальше при запуске, чтоб бесконечностью не забрызгало.
     
    Tomasina, NikitOS, ИгорьК и 3 другим нравится это.
  7. parovoZZ

    parovoZZ Гуру

    младшие ардуины не делят - не обучены

    компилятор не даст.
     
  8. -1 будет. На avr-платах, по крайней мере.
     
    Последнее редактирование: 24 апр 2019
  9. Airbus

    Airbus Радиохулиган Модератор

    М-дя...Риторический вопрос!А самое главное о Главном!
    Дык вот и я о том же
     
    DetSimen нравится это.
  10. Хорошо. Когда?
     
  11. Asper Daffy

    Asper Daffy Иксперд

    Когда компилятор не знает о том, каким будет делитель. А когда знает, он подставляет специальное значение и изменяет тип. Но и то, не всегда. Если программа таки собирается работать с этим добром, как с числом, то оставляет -1. Вот смотри.

    Первый пример: компилятор не знает каким будет делитель (это мы знаем, что там 0)

    Код (C++):

    void setup(void) {
        Serial.begin(57600);
        int n = 1 / (analogRead(0)/1024);
        Serial.print("n=");
        Serial.println(n);
    }

    void loop(void){}

    // Результат
    // n=-1
     

    Второй пример. Компилятор знает, что там 0 и никаких других действий с этим числом нет - подставляет специальное значение и меняет тип на char!

    Код (C++):

    void setup(void) {
        Serial.begin(57600);
        int n = 1 / 0;
        Serial.print("n=");
        Serial.println(n);
    }

    void loop(void){}

    // Результат
    // n=/
     

    Третий пример, тоже самое. что и второй, но сделаем n глобальной. Это значит, что с нею могут работать из других файлов. Поэтому компилятор не выпендривается и оставляет -1

    Код (C++):

    int n = 1 / 0;

    void setup(void) {
        Serial.begin(57600);
        Serial.print("n=");
        Serial.println(n);
    }

    void loop(void){}

    // Результат
    // n=-1
     

    В общем, правильный ответ на вопрос что будет, приведён в разделе 8.6 стандарта языка: "the behavior is undefined" и нехрен выпендриваться.
     
    Последнее редактирование: 24 апр 2019
    DetSimen, ZAZ-965 и Andrey12 нравится это.
  12. / это символ перед 0, то есть именно -1, только вывод происходит без проверки на отрицательные числа. Скорее всего где-то переоптимизировано.
    Неопределенность деления в стандарте языка касается именно стандарта. Конкретная реализация может работать предсказуемо, и я не вижу причины тому, чтобы тут не работала.
     
  13. Asper Daffy

    Asper Daffy Иксперд

    Ну, не видишь, и не надо. Когда будешь через тот же Serial что-нибудь другому контроллеру передавать - увидишь :)
     
    Andrey12 нравится это.
  14. parovoZZ

    parovoZZ Гуру

    Компилятор - не Алена.
     
  15. parovoZZ

    parovoZZ Гуру

    А у GCC какой алгоритм деления, если нет аппаратной поддержки?
     
  16. Asper Daffy

    Asper Daffy Иксперд

    Исходники библиотеки доступны, возьми, да посмотри.
     
    Andrey12 нравится это.
  17. parovoZZ

    parovoZZ Гуру

    не хочу смареть. Хачу чтоб ты сказал.
     
  18. Asper Daffy

    Asper Daffy Иксперд

    $99.99US
    Устраивает?
     
  19. parovoZZ

    parovoZZ Гуру

    почти соточка бичей меня устраивает. Где лежат?
     
  20. DIYMan

    DIYMan Guest

    Деда, утащу в золотой фонд цитат ;)
     
    Andrey12, DetSimen, NikitOS и ещё 1-му нравится это.