Нет конкретной константы, означающей log(√2), поэтому текущая реализация сначала вычисляет √2 (хотя это может быть предрассчитанный константой, которая, несмотря на это, тоже может отличаться от версии к версии), затем вычисляет log, что уже 100% требует математических инструкций, а следовательно зависит от типов округления, доступной точности, реализации div в камне и прочем.
Я, в своё время, был удивлён «плавающим» результатам, когда делал предрассчитанный аналог таблиц Брадиса для корня.
Ага, ну там, насколько помню, есть только fsqrt.s, которая вычисляет все биты мантиссы. Так что далее интересно как реализован логарифм. Рядом Тейлора, вестимо, как и везде. Так что это дело скорее всего поправимо.
А, кстати, тот что ожидается это zfinx и newlib, а то что получается это уже кастомное расширение, причем на симуляторе. Симулятор через soft float реализован, но меня терзают смутные сомнения что кто-то там подвирает.
То что ожидается оно хоть zfinx хоть x86, получается примерно одно и то же. Я даже на Macintosh Classic проверял, какая либо в mpw я хз, но результат получился ожидаемым.
С того что это написано в мануалах на rcpss, rsqrtss, vrecpe, fsin, fcos.
Кроме того на разных машинах будет использоваться разный набор sse-ускорялок, по итогу на одном камне будет считаться в 64 бита, на втором в 80.
Ещё есть флаги поведения 0/NaN/subnormals, когда дефолтные положения свича ftz/daz влияют на то, что конкретно вернётся около «спорных» значений (например сверхмалых величинах), плюс в ту же копилку то, что разные поколения по разному могут сохранять плюс/минус нуль в результатах (нарушения стандарта нет, но дальше может пойти по разным веткам из-за разного знака)
Ещё можно вспомнить лотерею с fdiv на первых пеньках.
Мне кажется в компах сначала идёт оптимизация всей формулы, а потом вычисление, а не сразу вычисление, поэтому результат в зависимости от возможностей железа. В библиотеке могут быть свои методы и коррекции, функция может выдать несколько значений например приблизительное, точное(формулой), верхнее, нижнее, быстрое. Но я не математик и даже не программист.
Я в физике привык уже от греха подальше всё в двойной точности считать. Но вот тут одинарная точность под руку попалась, все говорят – забей, а я чёт упёрся.
Ну тут же вопрос скорее не как считать, а можно ли доверять третьим лицам что они посчитале за тебя правильно, так чтобы я в коде дёрнул log() и не думал почём зря.
Корень из двух тут как пример что на входе подаётся и какой косячный результат. Могу другой пример показать, надо? Уверен там логарифм от двойки так же косячно реализован как и логарифм от корня из двух.
Я в физике привык уже от греха подальше всё в двойной точности считать.
И это правильно
Но вот тут одинарная точность под руку попалась
Как-то странно звучит - «попалась». Для использования одинарной точности нужны хорошие обоснования. Например, если точность вообще не важна, или с двойной точностью получается слишком медленно, или слишком много памяти ест.
когда в статье академической связанной с обучением объяснялась и подчёркивалась важность натурного эксперимента в процессе обучения не последних недоPhD и где-то в конце статьи оказывалось что натурный эксперимент(демонстрационный ибо) был оказывается компьютерной симуляцией в которой обучаемый делал дейстия
лол в том что очевидно что в реальности репертуар косяков обучаемого ширшее чем в учебном кохплютерном симе
Странная аналогия. Стандартный rand можно дёргать если устраивает его повторяемость. Если не устраивает - надо дёргать другие генераторы, которые на минуточку тоже из стандартной библиотеки.