2013-03-02 5 views
2
#include <stdio.h> 
#include <stdlib.h> 

#define answer 3.141593 

void main(int argc, char **argv) { 

     float a = (argc - 2)?: strtod(argv[1], 0);  
     printf("double = %lf ,float = %f", a-answer , a-answer); 

} 

, когда я запускаю его так:Что такое -0.0000 в c при использовании поплавков и двойных?

./a.out 3.141593 

выход

double = -0.000000 ,float = -0.000000 

Почему это -0.00000? как я могу сделать вывод 0.000000?

Как я могу сделать a == answer?


Как достигается значение -0, если оно использует дополнение 2?

+3

http://en.wikipedia.org/wiki/Signed_zero – Joe

+1

Установив тип 'a' быть' double'. –

+2

@joe: результат не отрицательный. Это просто печатается со слишком маленькими местами. –

ответ

7

Номера плавающей запятой не используют дополнение 2. У них есть знак, экспонент и мантисса, и ваши цифры имеют только ноль со знаком или, скорее всего, у вас есть число, например -1.0e-15, которое напечатано как -0.0000. попробуйте% e вместо% f. Небольшое различие заключается в невозможности хранить числа с последующей инфляцией в типе конечных данных о преципитации (какое-то округление произошло), и когда вы меняете double на float, должно произойти дополнительное округление. (учтите, что 3.141593 - бесконечное периодическое число в двоичном представлении, это действительно зависит от того, в каком типе хранится это число)

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

  • Нет связанных вопросов^_^