2015-07-27 2 views
-3

Я пытаюсь сделать некоторые расчеты в Fortran, который выглядит как:Добавление большого числа возвращает странное, большое количество

large number (order E40) - large number (order E40) 

я должен вернуться ноль. Большую часть времени он работает, но в некоторых случаях я получаю странные цифры. Один ответ Фортран дал мне -1E20. Другой странный ответ, который я получил, был 32768, что 2^15, как ни странно.

Кто-нибудь знает, почему это происходит?

+2

Вы должны показать свой код и показать, какой результат youbget для ввода и какого ввода вы хотите. Не забудьте показать определения ваших переменных. –

+1

Вы имеете в виду дополнение (как в заголовке) или вычитание (как в псевдокоде)? –

ответ

0

Трудно сказать, без фактического кода, но ...

Это следовало ожидать, если число достаточно близки. В то время как 1e20 довольно большой по сравнению с 1 или 2, он довольно мал по сравнению с 1e40.

Фактически, даже с двойной точностью у вас есть только 15-17 digits of precision. Учитывая, что значения, которые вы получаете, ниже возможной точности с номерами в диапазоне 1e40.

Что вы видите, это числовой шум.


[Еще одна возможность, конечно, состоит в том, что вы пытаетесь сделать это в одной точности. Это невозможно (максимум экспонента ~ 38), и все может случиться. ]

+0

Справа. Извините, я должен был сформулировать свой вопрос немного лучше - у меня есть два очень больших числа, которые мне нужно вычесть. Когда я делаю вычитание вручную, ответ равен нулю. Фортран, однако, выплескивает число, которое определенно не равно нулю - даже близко. Я понимаю, что это проблема с точностью. Все мои переменные в настоящее время имеют двойную точность, и мне интересно, есть ли способ увеличить это. Осмотревся в Интернете, я пробовал настоящие * 16 и реальные * 10, но ни одна из них не работает. – naomig

+1

@naomig Затем вы должны отредактировать вопрос. Может быть, вам нужно потратить некоторое время, чтобы прочитать [спросить] ... Улучшение вопроса может привести к удалению голосов и закрытых голосов. –

Смежные вопросы