|
|
|
предсказуем ли результат?
|
|||
|---|---|---|---|
|
#18+
chabapok jvm старается посчитать правильней, Правда их "правильный" sin(Pi) еще чуть дальше от 0 чем "неправильный". :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 20:00 |
|
||
|
предсказуем ли результат?
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, я не очень спец в fpu, но насколько я смог, вышло как-то так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Результат: 1.224646799147353207e-16 1.224606353822377258e-16 Действительно, второе число ближе к нулю. И java считает по первому вариану. Хотя по вашей ссылке написано что java точнее. Странно. Видимо, sse не точное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2014, 02:49 |
|
||
|
предсказуем ли результат?
|
|||
|---|---|---|---|
|
#18+
В math.h число определено с double precision Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Думаю что недостаток младших разрядов (нехватка точности по сравнению с long double) фактически нам говорит о том что в радианах M_PI это не развёрнутый 180 угол (против часовой стрелки от оси OX) а слегка уменьшенный угол вида 180-epsilon. Я не знаю как работает численный метод который расчитывает синус в FPU (скорее всего это расчёт суммы ряда Тейлора или Лорана) но аргумент перед подачей нормализуют (приводят к [ -M_PI/2.0 , M_PI/2.0 ]) и уже на этой операции мы можем иметь дефект аргумента. Тоесть мы получаем не синус нуля а синус epsilon. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2014, 14:46 |
|
||
|
предсказуем ли результат?
|
|||
|---|---|---|---|
|
#18+
maytonаргумент перед подачей нормализуют (приводят к [ -M_PI/2.0 , M_PI/2.0 ]) и уже на этой операции мы можем иметь дефект аргумента. IMHO насколько я понял из той ссылки, FPU не может на этапе приведения вычитать математическое пи, поэтому приводит тоже по своей упрощенной формуле, которая на больших числах приведет нас в космос. То есть, считая sin(M_PI) у нас M_PI не математическое, но и приведение к диапазону не использует математиически точное пи. В этом случае логично было бы предположить, что FPU должно было вычесть свое PI своей максимальной точности, которое равно M_PI, но тогда получился бы точно ноль. Причем, M_PI-atan(1)*4 дает 0, это намекает, что M_PI задефайнено с максимальной точностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 14:52 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38545645&tid=2127720]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 522ms |

| 0 / 0 |
