📄 target.c
字号:
++p; /* Interpret rest of number. */ bad_digit = FALSE; while (c != '\0') { if ((c >= '0') && (c <= '7')) c -= '0'; else { bad_digit = TRUE; c = 0; }#if 0 /* Don't complain about signed overflow; just unsigned overflow. */ if ((x == FFETARGET_integerALMOST_BIG_OVERFLOW_OCTAL) && (c == FFETARGET_integerFINISH_BIG_OVERFLOW_OCTAL) && (*(p + 1) == '\0')) { *val = FFETARGET_integerBIG_OVERFLOW_OCTAL; return TRUE; } else#endif#if FFETARGET_integerFINISH_BIG_OVERFLOW_OCTAL == 0 if (x >= FFETARGET_integerALMOST_BIG_OVERFLOW_OCTAL)#else if (x == FFETARGET_integerALMOST_BIG_OVERFLOW_OCTAL) { if ((c > FFETARGET_integerFINISH_BIG_OVERFLOW_OCTAL) || (*(p + 1) != '\0')) { ffebad_start (FFEBAD_INTEGER_TOO_LARGE); ffebad_here (0, ffelex_token_where_line (integer), ffelex_token_where_column (integer)); ffebad_finish (); *val = 0; return FALSE; } } else if (x > FFETARGET_integerALMOST_BIG_OVERFLOW_OCTAL)#endif { ffebad_start (FFEBAD_INTEGER_TOO_LARGE); ffebad_here (0, ffelex_token_where_line (integer), ffelex_token_where_column (integer)); ffebad_finish (); *val = 0; return FALSE; } x = (x << 3) + c; c = *(++p); }; if (bad_digit) { ffebad_start (FFEBAD_INVALID_OCTAL_DIGIT); ffebad_here (0, ffelex_token_where_line (integer), ffelex_token_where_column (integer)); ffebad_finish (); } *val = x; return !bad_digit;}/* ffetarget_multiply_complex1 -- Multiply function See prototype. */#if FFETARGET_okCOMPLEX1ffebadffetarget_multiply_complex1 (ffetargetComplex1 *res, ffetargetComplex1 l, ffetargetComplex1 r){ ffebad bad; ffetargetReal1 tmp1, tmp2; bad = ffetarget_multiply_real1 (&tmp1, l.real, r.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&tmp2, l.imaginary, r.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_subtract_real1 (&res->real, tmp1, tmp2); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&tmp1, l.imaginary, r.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&tmp2, l.real, r.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_add_real1 (&res->imaginary, tmp1, tmp2); return bad;}#endif/* ffetarget_multiply_complex2 -- Multiply function See prototype. */#if FFETARGET_okCOMPLEX2ffebadffetarget_multiply_complex2 (ffetargetComplex2 *res, ffetargetComplex2 l, ffetargetComplex2 r){ ffebad bad; ffetargetReal2 tmp1, tmp2; bad = ffetarget_multiply_real2 (&tmp1, l.real, r.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&tmp2, l.imaginary, r.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_subtract_real2 (&res->real, tmp1, tmp2); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&tmp1, l.imaginary, r.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&tmp2, l.real, r.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_add_real2 (&res->imaginary, tmp1, tmp2); return bad;}#endif/* ffetarget_power_complexdefault_integerdefault -- Power function See prototype. */ffebadffetarget_power_complexdefault_integerdefault (ffetargetComplexDefault *res, ffetargetComplexDefault l, ffetargetIntegerDefault r){ ffebad bad; ffetargetRealDefault tmp; ffetargetRealDefault tmp1; ffetargetRealDefault tmp2; ffetargetRealDefault two; if (ffetarget_iszero_real1 (l.real) && ffetarget_iszero_real1 (l.imaginary)) { ffetarget_real1_zero (&res->real); ffetarget_real1_zero (&res->imaginary); return FFEBAD; } if (r == 0) { ffetarget_real1_one (&res->real); ffetarget_real1_zero (&res->imaginary); return FFEBAD; } if (r < 0) { r = -r; bad = ffetarget_multiply_real1 (&tmp1, l.real, l.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&tmp2, l.imaginary, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_add_real1 (&tmp, tmp1, tmp2); if (bad != FFEBAD) return bad; bad = ffetarget_divide_real1 (&l.real, l.real, tmp); if (bad != FFEBAD) return bad; bad = ffetarget_divide_real1 (&l.imaginary, l.imaginary, tmp); if (bad != FFEBAD) return bad; bad = ffetarget_uminus_real1 (&l.imaginary, l.imaginary); if (bad != FFEBAD) return bad; } ffetarget_real1_two (&two); while ((r & 1) == 0) { bad = ffetarget_multiply_real1 (&tmp1, l.real, l.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&tmp2, l.imaginary, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_subtract_real1 (&tmp, tmp1, tmp2); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&l.imaginary, l.real, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&l.imaginary, l.imaginary, two); if (bad != FFEBAD) return bad; l.real = tmp; r >>= 1; } *res = l; r >>= 1; while (r != 0) { bad = ffetarget_multiply_real1 (&tmp1, l.real, l.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&tmp2, l.imaginary, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_subtract_real1 (&tmp, tmp1, tmp2); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&l.imaginary, l.real, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&l.imaginary, l.imaginary, two); if (bad != FFEBAD) return bad; l.real = tmp; if ((r & 1) == 1) { bad = ffetarget_multiply_real1 (&tmp1, res->real, l.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&tmp2, res->imaginary, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_subtract_real1 (&tmp, tmp1, tmp2); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&tmp1, res->imaginary, l.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real1 (&tmp2, res->real, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_add_real1 (&res->imaginary, tmp1, tmp2); if (bad != FFEBAD) return bad; res->real = tmp; } r >>= 1; } return FFEBAD;}/* ffetarget_power_complexdouble_integerdefault -- Power function See prototype. */#if FFETARGET_okCOMPLEXDOUBLEffebadffetarget_power_complexdouble_integerdefault (ffetargetComplexDouble *res, ffetargetComplexDouble l, ffetargetIntegerDefault r){ ffebad bad; ffetargetRealDouble tmp; ffetargetRealDouble tmp1; ffetargetRealDouble tmp2; ffetargetRealDouble two; if (ffetarget_iszero_real2 (l.real) && ffetarget_iszero_real2 (l.imaginary)) { ffetarget_real2_zero (&res->real); ffetarget_real2_zero (&res->imaginary); return FFEBAD; } if (r == 0) { ffetarget_real2_one (&res->real); ffetarget_real2_zero (&res->imaginary); return FFEBAD; } if (r < 0) { r = -r; bad = ffetarget_multiply_real2 (&tmp1, l.real, l.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&tmp2, l.imaginary, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_add_real2 (&tmp, tmp1, tmp2); if (bad != FFEBAD) return bad; bad = ffetarget_divide_real2 (&l.real, l.real, tmp); if (bad != FFEBAD) return bad; bad = ffetarget_divide_real2 (&l.imaginary, l.imaginary, tmp); if (bad != FFEBAD) return bad; bad = ffetarget_uminus_real2 (&l.imaginary, l.imaginary); if (bad != FFEBAD) return bad; } ffetarget_real2_two (&two); while ((r & 1) == 0) { bad = ffetarget_multiply_real2 (&tmp1, l.real, l.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&tmp2, l.imaginary, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_subtract_real2 (&tmp, tmp1, tmp2); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&l.imaginary, l.real, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&l.imaginary, l.imaginary, two); if (bad != FFEBAD) return bad; l.real = tmp; r >>= 1; } *res = l; r >>= 1; while (r != 0) { bad = ffetarget_multiply_real2 (&tmp1, l.real, l.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&tmp2, l.imaginary, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_subtract_real2 (&tmp, tmp1, tmp2); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&l.imaginary, l.real, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&l.imaginary, l.imaginary, two); if (bad != FFEBAD) return bad; l.real = tmp; if ((r & 1) == 1) { bad = ffetarget_multiply_real2 (&tmp1, res->real, l.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&tmp2, res->imaginary, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_subtract_real2 (&tmp, tmp1, tmp2); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&tmp1, res->imaginary, l.real); if (bad != FFEBAD) return bad; bad = ffetarget_multiply_real2 (&tmp2, res->real, l.imaginary); if (bad != FFEBAD) return bad; bad = ffetarget_add_real2 (&res->imaginary, tmp1, tmp2); if (bad != FFEBAD) return bad; res->real = tmp; } r >>= 1; } return FFEBAD;}#endif/* ffetarget_power_integerdefault_integerdefault -- Power function See prototype. */ffebadffetarget_power_integerdefault_integerdefault (ffetargetIntegerDefault *res, ffetargetIntegerDefault l, ffetargetIntegerDefault r){ if (l == 0) { *res = 0; return FFEBAD; } if (r == 0) { *res = 1; return FFEBAD; } if (r < 0) { if (l == 1) *res = 1; else if (l == 0) *res = 1; else if (l == -1) *res = ((-r) & 1) == 0 ? 1 : -1; else *res = 0; return FFEBAD; } while ((r & 1) == 0) { l *= l; r >>= 1; } *res = l; r >>= 1; while (r != 0) { l *= l; if ((r & 1) == 1) *res *= l; r >>= 1; } return FFEBAD;}/* ffetarget_power_realdefault_integerdefault -- Power function See prototype. */ffebadffetarget_power_realdefault_integerdefault (ffetargetRealDefault *res, ffetargetRealDefault l, ffetargetIntegerDefault r){ ffebad bad; if (ffetarget_iszero_real1 (l)) { ffetarget_real1_zero (res); return FFEBAD; } if (r == 0) { ffetarget_real1_one (res); return FFEBAD; } if (r < 0) { ffetargetRealDefault one; ffetarget_real1_one (&one); r = -r; bad = ffetarget_divide_real1 (&l, one, l); if (bad != FFEBAD) return bad; } while ((r & 1) == 0) { bad = ffetarget_multiply_real1 (&l, l, l); if (bad != FFEBAD) return bad; r >>= 1; } *res = l; r >>= 1; while (r != 0) { bad = ffetarget_multiply_real1 (&l, l, l); if (bad != FFEBAD) return bad; if ((r & 1) == 1) { bad = ffetarget_multiply_real1 (res, *res, l); if (bad != FFEBAD) return bad; } r >>= 1; } return FFEBAD;}/* ffetarget_power_realdouble_integerdefault -- Power function See prototype. */ffebadffetarget_power_realdouble_integerdefault (ffetargetRealDouble *res, ffetargetRealDouble l, ffetargetIntegerDefault r){ ffebad bad; if (ffetarget_iszero_real2 (l))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -