Help save net neutrality! Learn more.
Close

[ebeccb]: / inst / __intSingleFormInt__.m  Maximize  Restore  History

Download this file

97 lines (79 with data), 2.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
## Copyright (C) 2008 simone pernice
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
## __intSingleFormInt__ return an interval from the given engineer format string
## Author: simone pernice
## Created: 2008-12-31
function ret = __intSingleFormInt__ (engnotation)
if (! ischar (engnotation))
error ("It is required a string as input");
endif
if (nargin() != 1)
error ("Wrong number of argument passed to the function.");
endif
l = length (engnotation);
#skip the initial sign
s = i = 1;
if ((c = engnotation(1)) == "+" || c == "-")
i = 2;
endif
#count for the value
while (i <= l && (isdigit(c = engnotation(i)) || c == "." || c == "e"))
++i;
if ( c == "e" && (engnotation(i) == "+" || engnotation(i) == "-"))
++i;
endif
endwhile
#convert the value
val = str2double(substr(engnotation,s,i-s));
#look if a engineer coefficient is present and get the power
power = strfind ("yzafpnum KMGTPEZY", engnotation(i));
if (length (power) == 0)
power = 9;
else
power = power (1);
++i;
endif
#apply the power
val *= 10^(3*(power-9));
#look for the positive and negative tolerance (fpt is foundPositiveTolerance, fnt is foundNegativeTolerance)
fpt = fnt = 0;
while (i <= l)
#skip positive and negative signs storing what was found
while (i <= l && ((c = engnotation(i)) == "+" || c == "-"))
++i;
if (c == "+") fpt = 1;
elseif (c == "-") fnt = 1;
endif
endwhile
s = i;
#skip the digits untile the % is found
while (i <= l && engnotation(i) != "%")
++i;
endwhile
#convert the positive tolerance
if (fpt)
ptol = str2double(substr(engnotation,s,i-s));
endif
#convert the negative tolerance
if (fnt)
ntol = -str2double(substr(engnotation,s,i-s));
endif
fpt = fnt = 0;
++i;
endwhile
#build the interval
ret = valtol100ToInt(val, ptol, ntol);
endfunction