{
double d;
char *next;
- d = strtod(numstr, &next);
+ if(numstr[0]=='0' && (numstr[1]|0x20)=='x') {
+ d = strtoul(numstr, &next, 16);
+ } else
+ d = strtod(numstr, &next);
/* if parsing succeeded, check for and interpret postfixes */
if (next!=numstr) {
- if (*next >= 'E' && *next <= 'z') {
+ if (next[0] == 'd' && next[1] == 'B') {
+ /* treat dB as decibels instead of decibytes */
+ d = pow(10, d / 20);
+ next += 2;
+ } else if (*next >= 'E' && *next <= 'z') {
int e= si_prefixes[*next - 'E'];
if (e) {
if (next[1] == 'i') {
"not(1)",
"not(NAN)",
"not(0)",
+ "6.0206dB",
+ "-3.0103dB",
+ "pow(0,1.23)",
+ "pow(PI,1.23)",
+ "PI^1.23",
+ "pow(-1,1.23)",
+ "if(1, 2)",
+ "ifnot(0, 23)",
+ "ifnot(1, NaN) + if(0, 1)",
+ "taylor(1, 1)",
+ "taylor(eq(mod(ld(1),4),1)-eq(mod(ld(1),4),3), PI/2, 1)",
+ "root(sin(ld(0))-1, 2)",
+ "root(sin(ld(0))+6+sin(ld(0)/12)-log(ld(0)), 100)",
+ "7000000B*random(0)",
+ "squish(2)",
+ "gauss(0.1)",
+ "hypot(4,3)",
+ "gcd(30,55)*min(9,1)",
NULL
};
INIT_XMM sse
VECTOR_FMUL_SCALAR
- VBROADCASTSD xmm0, mulm
+
+ ;------------------------------------------------------------------------------
+ ; void ff_vector_dmul_scalar(double *dst, const double *src, double mul,
+ ; int len)
+ ;------------------------------------------------------------------------------
+
+ %macro VECTOR_DMUL_SCALAR 0
+ %if UNIX64
+ cglobal vector_dmul_scalar, 3,3,3, dst, src, len
+ %else
+ cglobal vector_dmul_scalar, 4,4,3, dst, src, mul, len
+ %endif
+ %if ARCH_X86_32
++ VBROADCASTSD m0, mulm
+ %else
+ %if WIN64
+ movlhps xmm2, xmm2
+ %if cpuflag(avx)
+ vinsertf128 ymm2, ymm2, xmm2, 1
+ %endif
+ SWAP 0, 2
+ %else
+ movlhps xmm0, xmm0
+ %if cpuflag(avx)
+ vinsertf128 ymm0, ymm0, xmm0, 1
+ %endif
+ %endif
+ %endif
+ lea lenq, [lend*8-2*mmsize]
+ .loop:
+ mulpd m1, m0, [srcq+lenq ]
+ mulpd m2, m0, [srcq+lenq+mmsize]
+ mova [dstq+lenq ], m1
+ mova [dstq+lenq+mmsize], m2
+ sub lenq, 2*mmsize
+ jge .loop
+ REP_RET
+ %endmacro
+
+ INIT_XMM sse2
+ VECTOR_DMUL_SCALAR
+ %if HAVE_AVX_EXTERNAL
+ INIT_YMM avx
+ VECTOR_DMUL_SCALAR
+ %endif
Evaluating 'not(0)'
'not(0)' -> 1.000000
+ Evaluating '6.0206dB'
+ '6.0206dB' -> 2.000000
+
+ Evaluating '-3.0103dB'
+ '-3.0103dB' -> 0.707107
+
+Evaluating 'pow(0,1.23)'
+'pow(0,1.23)' -> 0.000000
+
+Evaluating 'pow(PI,1.23)'
+'pow(PI,1.23)' -> 4.087844
+
+Evaluating 'PI^1.23'
+'PI^1.23' -> 4.087844
+
+Evaluating 'pow(-1,1.23)'
+'pow(-1,1.23)' -> nan
+
+Evaluating 'if(1, 2)'
+'if(1, 2)' -> 2.000000
+
+Evaluating 'ifnot(0, 23)'
+'ifnot(0, 23)' -> 23.000000
+
+Evaluating 'ifnot(1, NaN) + if(0, 1)'
+'ifnot(1, NaN) + if(0, 1)' -> 0.000000
+
+Evaluating 'taylor(1, 1)'
+'taylor(1, 1)' -> 2.718282
+
+Evaluating 'taylor(eq(mod(ld(1),4),1)-eq(mod(ld(1),4),3), PI/2, 1)'
+'taylor(eq(mod(ld(1),4),1)-eq(mod(ld(1),4),3), PI/2, 1)' -> 1.000000
+
+Evaluating 'root(sin(ld(0))-1, 2)'
+'root(sin(ld(0))-1, 2)' -> 1.570796
+
+Evaluating 'root(sin(ld(0))+6+sin(ld(0)/12)-log(ld(0)), 100)'
+'root(sin(ld(0))+6+sin(ld(0)/12)-log(ld(0)), 100)' -> 60.965601
+
+Evaluating '7000000B*random(0)'
+'7000000B*random(0)' -> 0.003078
+
+Evaluating 'squish(2)'
+'squish(2)' -> 0.000335
+
+Evaluating 'gauss(0.1)'
+'gauss(0.1)' -> 0.396953
+
+Evaluating 'hypot(4,3)'
+'hypot(4,3)' -> 5.000000
+
+Evaluating 'gcd(30,55)*min(9,1)'
+'gcd(30,55)*min(9,1)' -> 5.000000
+
12.700000 == 12.7
0.931323 == 0.931322575