MATLAB - вопрос о поле

Почему $ visible отличается от $ watch?

watchExpression оценивается и сравнивается с предыдущим значением в каждом цикле digest (), если в значении watchExpression есть изменение, вызывается функция watch.

$ Наблюдение является специфическим для отслеживания интерполированных значений. Если значение атрибута директивы интерполировано, например, dir-attr="{{ scopeVar }}", функция наблюдения будет вызываться только тогда, когда установлено интерполированное значение (и, следовательно, когда $ digest уже определил, что обновления должны быть выполнены). По сути, уже есть наблюдатель для интерполяции, и функция $ наблюдайте за этим.

См. $ Наблюдать & amp; $ set в compile.js

8
задан Amro 3 October 2011 в 23:35
поделиться

3 ответа

В двух словах: ошибки усечения.

Вы правы, c должно быть 1,0 в точной арифметике. Однако, поскольку вы использовали число с плавающей запятой в аргументах rem, вы получите ответ в виде числа с плавающей запятой. По-видимому, b не совсем 2, а 2,0, что означает, что это двойное значение, очень близкое к 2. Следовательно, b / 2 становится двойным 1,0, по-видимому, в этом случае его значение немного меньше единицы, что дает вам 0 как целочисленное значение. Если вы хотите предотвратить это, используйте и floor, и ceil, и сравните значения.

Если вы хотите преобразовать ответ в целое число, просто используйте round вместо floor.

11
ответ дан 5 December 2019 в 08:54
поделиться

Если вы добавите строку

d = b-a

в свой пример, вы увидите результат

    d =

 -4.4409e-016

, означающий, что Matlab вычислил число, близкое, но не точное, к 2 для b. Это очень важно при работе с числами с плавающей запятой. Для получения дополнительной информации попробуйте

help eps

.

6
ответ дан 5 December 2019 в 08:54
поделиться

Числовые проблемы такого рода также рассматриваются в MATLAB FAQ

2
ответ дан 5 December 2019 в 08:54
поделиться
Другие вопросы по тегам:

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