2016-04-24 5 views
0

У меня есть программа, которая печатает матрицу с очень маленькими значениями. Пример моей матрицыСравните небольшие значения с нулем с определенной точностью

0.00000000000000004 0.12300000000000000 

0.00000000011111114 0.00000000000038544 

То, что я хотел бы сделать, это сравнить каждое значение с zero и принять его, чтобы быть zero с определенной точностью, что 9 знаков после запятой. Другими словами, если число имеет 9 zeros в качестве его первых десятичных значений, я хочу рассматривать его как zero, в противном случае нет.

Я много искал, но ничего не нашел об этом. Есть идеи?

+3

Сравнить '-1e-9 <= f <= 1e-9'? – MicroVirus

+0

@MicroVirus да, что сработало, спасибо огромное! Я использовал правильную часть вашего условия, 'f <= 1e-9'. Не могли бы вы объяснить, что проверяет левая часть '-1e-9 <= f'? – Marievi

+0

@Marievi: '-1e-9' имеет 9 нулей в качестве первых десятичных значений !!! –

ответ

5

Как я отметил в своем комментарии, можно просто сравнить поплавок f через -1e-9 < f < 1e-9.

Вам нужны как положительная, так и отрицательная граница, чтобы обеспечить правильную работу положительных и отрицательных чисел. Вы используете 1e-9, а не 1e-10, потому что если число меньше 1e-9, число с 8 десятичными знаками 0, то оно имеет 9 десятичных знаков или больше нуля.

Обратите внимание, что из-за плавающего округления 1e-9 при переходе от десятичной к двоичной, вы можете увидеть некоторую ошибку округления.

+1

Большое спасибо @MicroVirus! – Marievi

+0

Добро пожаловать :) – MicroVirus

2

Моя идея аналогична тому, что упоминал @MicroVirus в своем комментарии. Вы можете просто сравнить его с определенным номером:

if(num < 1E-9 && num > -1E-9) 
    num = 0; 

или

if(num * 1E9 < 1 && num * 1E9 > -1) 
    num = 0; 
+3

Кажется уместным дать хотя бы некоторые комментарии к комментарию @ MicroVirus. –

+1

@barakmanos У нас была такая же идея. Все равно отредактировано. –

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