codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <stdio.h> #define N 256 int main() { static char buff[N]; double significant, floatingNumber; int exponent, i, rc; printf("floating-point: "); scanf("%s", buff); /* analyse floating-point expressio */ { int i, expsign, sigsign; rc = 1; double k; significant = 0.0; exponent = 0; sigsign = 0; i = 0; if (buff[i] == 'e') rc = 0; /* sign */ if (buff[i] == '-') { sigsign = 1; i++; } /* before point */ for (; buff[i] && buff[i] != '.'&& buff[i] != 'e' ; i++) { if (buff[i] >= '0' && buff[i] <= '9') { significant = significant * 10.0; significant = significant + (buff[i] - '0'); } else { rc = 0; break; } } /* after point */ if (buff[i] == '.') { i++; k = 0.1; for (; buff[i] && buff[i] != 'e'; i++) { if (buff[i] >= '0' && buff[i] <= '9') { significant = significant + (k * (buff[i] - '0')); k = k / 10.0; } else { rc = 0; break; } } } /* exponential part */ if (buff[i] == 'e') { i++; /* non-exponential indication : error */ if (buff[i] == 0) rc = 0; expsign = 0; /* exponential sign */ if (buff[i] == '+') { i++; } else if (buff[i] == '-') { expsign = 1; i++; } /* exponential indication */ for (; buff[i]; i++) { if (buff[i] >= '0' && buff[i] <= '9') { exponent = exponent * 10; exponent = exponent + (buff[i] - '0'); } else { rc = 0; break; } } if (expsign > 0) exponent = exponent * -1; } if (sigsign > 0) significant = significant * -1.0; } /* Good: rc = 1, Bad: rc = 0 */ if (rc) { /* make double */ floatingNumber = significant; if (exponent > 0) { for (i = 0; i < exponent; i++) floatingNumber *= 10.0; } else if (exponent < 0) { for (i = 0; i > exponent; --i) floatingNumber /= 10.0; } /* plus one */ floatingNumber = floatingNumber + 1.0; printf("Floating Number: %f\n", floatingNumber); } else { printf("Bad format.\n"); } return 0; } /* end */
Private
[
?
]
Run code
Submit