@zigc/lib 0.16.0-dev.3091 → 0.16.0-dev.3128
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/c/math.zig +121 -30
- package/compiler/build_runner.zig +1 -0
- package/compiler/test_runner.zig +191 -59
- package/compiler_rt/cos.zig +141 -52
- package/compiler_rt/long_double.zig +37 -0
- package/compiler_rt/rem_pio2l.zig +173 -0
- package/compiler_rt/sin.zig +140 -55
- package/compiler_rt/sincos.zig +279 -72
- package/compiler_rt/tan.zig +118 -47
- package/compiler_rt/trig.zig +256 -6
- package/fuzzer.zig +855 -307
- package/package.json +1 -1
- package/std/Build/Fuzz.zig +6 -19
- package/std/Build/Step/Run.zig +530 -68
- package/std/Build/abi.zig +39 -7
- package/std/Build.zig +3 -0
- package/std/compress/flate/Compress.zig +3 -3
- package/std/debug/Info.zig +4 -0
- package/std/heap/ArenaAllocator.zig +145 -154
- package/std/mem/Allocator.zig +4 -5
- package/std/mem.zig +48 -0
- package/std/priority_dequeue.zig +13 -12
- package/std/priority_queue.zig +5 -4
- package/std/zig/Client.zig +8 -3
- package/std/zig/Server.zig +26 -0
- package/libc/mingw/complex/cabs.c +0 -48
- package/libc/mingw/complex/cabsf.c +0 -48
- package/libc/mingw/complex/cacos.c +0 -50
- package/libc/mingw/complex/cacosf.c +0 -50
- package/libc/mingw/complex/carg.c +0 -48
- package/libc/mingw/complex/cargf.c +0 -48
- package/libc/mingw/complex/casin.c +0 -50
- package/libc/mingw/complex/casinf.c +0 -50
- package/libc/mingw/complex/catan.c +0 -50
- package/libc/mingw/complex/catanf.c +0 -50
- package/libc/mingw/complex/ccos.c +0 -50
- package/libc/mingw/complex/ccosf.c +0 -50
- package/libc/mingw/complex/cexp.c +0 -48
- package/libc/mingw/complex/cexpf.c +0 -48
- package/libc/mingw/complex/cimag.c +0 -48
- package/libc/mingw/complex/cimagf.c +0 -48
- package/libc/mingw/complex/clog.c +0 -48
- package/libc/mingw/complex/clog10.c +0 -49
- package/libc/mingw/complex/clog10f.c +0 -49
- package/libc/mingw/complex/clogf.c +0 -48
- package/libc/mingw/complex/conj.c +0 -48
- package/libc/mingw/complex/conjf.c +0 -48
- package/libc/mingw/complex/cpow.c +0 -48
- package/libc/mingw/complex/cpowf.c +0 -48
- package/libc/mingw/complex/cproj.c +0 -48
- package/libc/mingw/complex/cprojf.c +0 -48
- package/libc/mingw/complex/creal.c +0 -48
- package/libc/mingw/complex/crealf.c +0 -48
- package/libc/mingw/complex/csin.c +0 -50
- package/libc/mingw/complex/csinf.c +0 -50
- package/libc/mingw/complex/csqrt.c +0 -48
- package/libc/mingw/complex/csqrtf.c +0 -48
- package/libc/mingw/complex/ctan.c +0 -50
- package/libc/mingw/complex/ctanf.c +0 -50
- package/libc/mingw/math/arm/s_rint.c +0 -86
- package/libc/mingw/math/arm/s_rintf.c +0 -51
- package/libc/mingw/math/arm/sincos.S +0 -30
- package/libc/mingw/math/arm-common/sincosl.c +0 -13
- package/libc/mingw/math/arm64/rint.c +0 -12
- package/libc/mingw/math/arm64/rintf.c +0 -12
- package/libc/mingw/math/arm64/sincos.S +0 -32
- package/libc/mingw/math/bsd_private_base.h +0 -148
- package/libc/mingw/math/frexpf.c +0 -13
- package/libc/mingw/math/frexpl.c +0 -71
- package/libc/mingw/math/x86/acosf.c +0 -29
- package/libc/mingw/math/x86/atanf.c +0 -23
- package/libc/mingw/math/x86/atanl.c +0 -18
- package/libc/mingw/math/x86/cos.def.h +0 -65
- package/libc/mingw/math/x86/cosl.c +0 -46
- package/libc/mingw/math/x86/cosl_internal.S +0 -55
- package/libc/mingw/math/x86/ldexp.c +0 -23
- package/libc/mingw/math/x86/scalbn.S +0 -41
- package/libc/mingw/math/x86/scalbnf.S +0 -40
- package/libc/mingw/math/x86/sin.def.h +0 -65
- package/libc/mingw/math/x86/sinl.c +0 -46
- package/libc/mingw/math/x86/sinl_internal.S +0 -58
- package/libc/mingw/math/x86/tanl.S +0 -62
- package/libc/mingw/misc/btowc.c +0 -28
- package/libc/mingw/misc/wcstof.c +0 -66
- package/libc/mingw/misc/wcstoimax.c +0 -132
- package/libc/mingw/misc/wcstoumax.c +0 -126
- package/libc/mingw/misc/wctob.c +0 -29
- package/libc/mingw/misc/winbs_uint64.c +0 -6
- package/libc/mingw/misc/winbs_ulong.c +0 -6
- package/libc/mingw/misc/winbs_ushort.c +0 -6
- package/libc/mingw/stdio/_Exit.c +0 -10
- package/libc/mingw/stdio/_findfirst64i32.c +0 -21
- package/libc/mingw/stdio/_findnext64i32.c +0 -21
- package/libc/mingw/stdio/_fstat64i32.c +0 -37
- package/libc/mingw/stdio/_stat64i32.c +0 -37
- package/libc/mingw/stdio/_wfindfirst64i32.c +0 -21
- package/libc/mingw/stdio/_wfindnext64i32.c +0 -21
- package/libc/mingw/stdio/_wstat64i32.c +0 -37
- package/libc/musl/src/legacy/valloc.c +0 -8
- package/libc/musl/src/math/__cosl.c +0 -96
- package/libc/musl/src/math/__sinl.c +0 -78
- package/libc/musl/src/math/__tanl.c +0 -143
- package/libc/musl/src/math/aarch64/lrint.c +0 -10
- package/libc/musl/src/math/aarch64/lrintf.c +0 -10
- package/libc/musl/src/math/aarch64/rintf.c +0 -7
- package/libc/musl/src/math/cosl.c +0 -39
- package/libc/musl/src/math/exp_data.c +0 -182
- package/libc/musl/src/math/exp_data.h +0 -26
- package/libc/musl/src/math/finite.c +0 -7
- package/libc/musl/src/math/finitef.c +0 -7
- package/libc/musl/src/math/frexp.c +0 -23
- package/libc/musl/src/math/frexpf.c +0 -23
- package/libc/musl/src/math/frexpl.c +0 -29
- package/libc/musl/src/math/i386/lrint.c +0 -8
- package/libc/musl/src/math/i386/lrintf.c +0 -8
- package/libc/musl/src/math/i386/rintf.c +0 -7
- package/libc/musl/src/math/lrint.c +0 -72
- package/libc/musl/src/math/lrintf.c +0 -8
- package/libc/musl/src/math/pow_data.c +0 -180
- package/libc/musl/src/math/pow_data.h +0 -22
- package/libc/musl/src/math/powerpc64/lrint.c +0 -16
- package/libc/musl/src/math/powerpc64/lrintf.c +0 -16
- package/libc/musl/src/math/rintf.c +0 -30
- package/libc/musl/src/math/s390x/rintf.c +0 -15
- package/libc/musl/src/math/sincosl.c +0 -60
- package/libc/musl/src/math/sinl.c +0 -41
- package/libc/musl/src/math/tanl.c +0 -29
- package/libc/musl/src/math/x32/lrint.s +0 -5
- package/libc/musl/src/math/x32/lrintf.s +0 -5
- package/libc/musl/src/math/x86_64/lrint.c +0 -8
- package/libc/musl/src/math/x86_64/lrintf.c +0 -8
- package/libc/wasi/libc-bottom-half/sources/reallocarray.c +0 -14
package/compiler_rt/sin.zig
CHANGED
|
@@ -3,23 +3,28 @@
|
|
|
3
3
|
//!
|
|
4
4
|
//! https://git.musl-libc.org/cgit/musl/tree/src/math/sinf.c
|
|
5
5
|
//! https://git.musl-libc.org/cgit/musl/tree/src/math/sin.c
|
|
6
|
+
//! https://git.musl-libc.org/cgit/musl/tree/src/math/sinl.c
|
|
6
7
|
|
|
7
8
|
const std = @import("std");
|
|
8
9
|
const math = std.math;
|
|
9
10
|
const mem = std.mem;
|
|
10
11
|
const expect = std.testing.expect;
|
|
12
|
+
const expectApproxEqAbs = std.testing.expectApproxEqAbs;
|
|
11
13
|
|
|
12
14
|
const compiler_rt = @import("../compiler_rt.zig");
|
|
13
15
|
const symbol = @import("../compiler_rt.zig").symbol;
|
|
14
16
|
const trig = @import("trig.zig");
|
|
15
17
|
const rem_pio2 = @import("rem_pio2.zig").rem_pio2;
|
|
16
18
|
const rem_pio2f = @import("rem_pio2f.zig").rem_pio2f;
|
|
19
|
+
const rem_pio2l = @import("rem_pio2l.zig").rem_pio2l;
|
|
20
|
+
const ld = @import("long_double.zig");
|
|
17
21
|
|
|
18
22
|
comptime {
|
|
19
|
-
symbol(&
|
|
23
|
+
symbol(&sinh, "__sinh");
|
|
24
|
+
symbol(&sinl, "__sinl");
|
|
20
25
|
symbol(&sinf, "sinf");
|
|
21
26
|
symbol(&sin, "sin");
|
|
22
|
-
symbol(&
|
|
27
|
+
symbol(&sinx, "__sinx");
|
|
23
28
|
if (compiler_rt.want_ppc_abi) {
|
|
24
29
|
symbol(&sinq, "sinf128");
|
|
25
30
|
}
|
|
@@ -27,7 +32,7 @@ comptime {
|
|
|
27
32
|
symbol(&sinl, "sinl");
|
|
28
33
|
}
|
|
29
34
|
|
|
30
|
-
pub fn
|
|
35
|
+
pub fn sinh(x: f16) callconv(.c) f16 {
|
|
31
36
|
// TODO: more efficient implementation
|
|
32
37
|
return @floatCast(sinf(x));
|
|
33
38
|
}
|
|
@@ -55,27 +60,27 @@ pub fn sinf(x: f32) callconv(.c) f32 {
|
|
|
55
60
|
}
|
|
56
61
|
return x;
|
|
57
62
|
}
|
|
58
|
-
return trig.
|
|
63
|
+
return trig.sindf(x);
|
|
59
64
|
}
|
|
60
65
|
if (ix <= 0x407b53d1) { // |x| ~<= 5*pi/4
|
|
61
66
|
if (ix <= 0x4016cbe3) { // |x| ~<= 3pi/4
|
|
62
67
|
if (sign) {
|
|
63
|
-
return -trig.
|
|
68
|
+
return -trig.cosdf(x + s1pio2);
|
|
64
69
|
} else {
|
|
65
|
-
return trig.
|
|
70
|
+
return trig.cosdf(x - s1pio2);
|
|
66
71
|
}
|
|
67
72
|
}
|
|
68
|
-
return trig.
|
|
73
|
+
return trig.sindf(if (sign) -(x + s2pio2) else -(x - s2pio2));
|
|
69
74
|
}
|
|
70
75
|
if (ix <= 0x40e231d5) { // |x| ~<= 9*pi/4
|
|
71
76
|
if (ix <= 0x40afeddf) { // |x| ~<= 7*pi/4
|
|
72
77
|
if (sign) {
|
|
73
|
-
return trig.
|
|
78
|
+
return trig.cosdf(x + s3pio2);
|
|
74
79
|
} else {
|
|
75
|
-
return -trig.
|
|
80
|
+
return -trig.cosdf(x - s3pio2);
|
|
76
81
|
}
|
|
77
82
|
}
|
|
78
|
-
return trig.
|
|
83
|
+
return trig.sindf(if (sign) x + s4pio2 else x - s4pio2);
|
|
79
84
|
}
|
|
80
85
|
|
|
81
86
|
// sin(Inf or NaN) is NaN
|
|
@@ -86,10 +91,10 @@ pub fn sinf(x: f32) callconv(.c) f32 {
|
|
|
86
91
|
var y: f64 = undefined;
|
|
87
92
|
const n = rem_pio2f(x, &y);
|
|
88
93
|
return switch (n & 3) {
|
|
89
|
-
0 => trig.
|
|
90
|
-
1 => trig.
|
|
91
|
-
2 => trig.
|
|
92
|
-
else => -trig.
|
|
94
|
+
0 => trig.sindf(y),
|
|
95
|
+
1 => trig.cosdf(y),
|
|
96
|
+
2 => trig.sindf(-y),
|
|
97
|
+
else => -trig.cosdf(y),
|
|
93
98
|
};
|
|
94
99
|
}
|
|
95
100
|
|
|
@@ -110,7 +115,7 @@ pub fn sin(x: f64) callconv(.c) f64 {
|
|
|
110
115
|
}
|
|
111
116
|
return x;
|
|
112
117
|
}
|
|
113
|
-
return trig.
|
|
118
|
+
return trig.sin(x, 0.0, 0);
|
|
114
119
|
}
|
|
115
120
|
|
|
116
121
|
// sin(Inf or NaN) is NaN
|
|
@@ -121,72 +126,152 @@ pub fn sin(x: f64) callconv(.c) f64 {
|
|
|
121
126
|
var y: [2]f64 = undefined;
|
|
122
127
|
const n = rem_pio2(x, &y);
|
|
123
128
|
return switch (n & 3) {
|
|
124
|
-
0 => trig.
|
|
125
|
-
1 => trig.
|
|
126
|
-
2 => -trig.
|
|
127
|
-
else => -trig.
|
|
129
|
+
0 => trig.sin(y[0], y[1], 1),
|
|
130
|
+
1 => trig.cos(y[0], y[1]),
|
|
131
|
+
2 => -trig.sin(y[0], y[1], 1),
|
|
132
|
+
else => -trig.cos(y[0], y[1]),
|
|
128
133
|
};
|
|
129
134
|
}
|
|
130
135
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
136
|
+
fn sinx(x: f80) callconv(.c) f80 {
|
|
137
|
+
const se = ld.signExponent(x) & 0x7fff;
|
|
138
|
+
if (se == 0x7fff) {
|
|
139
|
+
return x - x;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (@abs(x) < trig.pi_4) {
|
|
143
|
+
if (se < 0x3fff - (math.floatMantissaBits(f80) / 2)) {
|
|
144
|
+
// raise inexact if x!=0 and underflow if subnormal
|
|
145
|
+
if (compiler_rt.want_float_exceptions) {
|
|
146
|
+
mem.doNotOptimizeAway(if (se == 0) x * 0x1p-120 else x + 0x1p120);
|
|
147
|
+
}
|
|
148
|
+
return x;
|
|
149
|
+
}
|
|
150
|
+
return trig.sinx(x, 0.0, 0);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
var y: [2]f80 = undefined;
|
|
154
|
+
const n = rem_pio2l(f80, x, &y);
|
|
155
|
+
return switch (n & 3) {
|
|
156
|
+
0 => trig.sinx(y[0], y[1], 1),
|
|
157
|
+
1 => trig.cosx(y[0], y[1]),
|
|
158
|
+
2 => -trig.sinx(y[0], y[1], 1),
|
|
159
|
+
else => -trig.cosx(y[0], y[1]),
|
|
160
|
+
};
|
|
134
161
|
}
|
|
135
162
|
|
|
136
163
|
pub fn sinq(x: f128) callconv(.c) f128 {
|
|
137
|
-
|
|
138
|
-
|
|
164
|
+
const se = ld.signExponent(x) & 0x7fff;
|
|
165
|
+
if (se == 0x7fff) {
|
|
166
|
+
return x - x;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (@abs(x) < trig.pi_4) {
|
|
170
|
+
if (se < 0x3fff - (math.floatMantissaBits(f128) / 2)) {
|
|
171
|
+
// raise inexact if x!=0 and underflow if subnormal
|
|
172
|
+
if (compiler_rt.want_float_exceptions) {
|
|
173
|
+
mem.doNotOptimizeAway(if (se == 0) x * 0x1p-120 else x + 0x1p120);
|
|
174
|
+
}
|
|
175
|
+
return x;
|
|
176
|
+
}
|
|
177
|
+
return trig.sinq(x, 0.0, 0);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
var y: [2]f128 = undefined;
|
|
181
|
+
const n = rem_pio2l(f128, x, &y);
|
|
182
|
+
return switch (n & 3) {
|
|
183
|
+
0 => trig.sinq(y[0], y[1], 1),
|
|
184
|
+
1 => trig.cosq(y[0], y[1]),
|
|
185
|
+
2 => -trig.sinq(y[0], y[1], 1),
|
|
186
|
+
else => -trig.cosq(y[0], y[1]),
|
|
187
|
+
};
|
|
139
188
|
}
|
|
140
189
|
|
|
141
190
|
pub fn sinl(x: c_longdouble) callconv(.c) c_longdouble {
|
|
142
191
|
switch (@typeInfo(c_longdouble).float.bits) {
|
|
143
|
-
16 => return
|
|
192
|
+
16 => return sinh(x),
|
|
144
193
|
32 => return sinf(x),
|
|
145
194
|
64 => return sin(x),
|
|
146
|
-
80 => return
|
|
195
|
+
80 => return sinx(x),
|
|
147
196
|
128 => return sinq(x),
|
|
148
197
|
else => @compileError("unreachable"),
|
|
149
198
|
}
|
|
150
199
|
}
|
|
151
200
|
|
|
152
|
-
|
|
153
|
-
const
|
|
201
|
+
fn testSinSpecial(comptime T: type) !void {
|
|
202
|
+
const f = switch (T) {
|
|
203
|
+
f32 => sinf,
|
|
204
|
+
f64 => sin,
|
|
205
|
+
f80 => sinx,
|
|
206
|
+
f128 => sinq,
|
|
207
|
+
else => @compileError("unimplemented"),
|
|
208
|
+
};
|
|
154
209
|
|
|
155
|
-
try expect(math.
|
|
156
|
-
try expect(math.
|
|
157
|
-
try expect(math.
|
|
158
|
-
try expect(math.
|
|
159
|
-
try expect(math.
|
|
160
|
-
try expect(math.approxEqAbs(f32, sinf(37.45), -0.246544, epsilon));
|
|
161
|
-
try expect(math.approxEqAbs(f32, sinf(89.123), 0.916166, epsilon));
|
|
210
|
+
try expect(math.isPositiveZero(f(0.0)));
|
|
211
|
+
try expect(math.isNegativeZero(f(-0.0)));
|
|
212
|
+
try expect(math.isNan(f(math.inf(T))));
|
|
213
|
+
try expect(math.isNan(f(-math.inf(T))));
|
|
214
|
+
try expect(math.isNan(f(math.nan(T))));
|
|
162
215
|
}
|
|
163
216
|
|
|
164
|
-
test "
|
|
165
|
-
const epsilon =
|
|
166
|
-
|
|
167
|
-
try
|
|
168
|
-
try
|
|
169
|
-
try
|
|
170
|
-
try
|
|
171
|
-
try
|
|
172
|
-
try
|
|
173
|
-
try expect(math.approxEqAbs(f64, sin(89.123), 0.916166, epsilon));
|
|
217
|
+
test "sin32.normal" {
|
|
218
|
+
const epsilon = math.floatEps(f32);
|
|
219
|
+
try expectApproxEqAbs(@as(f32, 0.0), sinf(0.0), epsilon);
|
|
220
|
+
try expectApproxEqAbs(@as(f32, 0.19866933), sinf(0.2), epsilon);
|
|
221
|
+
try expectApproxEqAbs(@as(f32, 0.77851737), sinf(0.8923), epsilon);
|
|
222
|
+
try expectApproxEqAbs(@as(f32, 0.997495), sinf(1.5), epsilon);
|
|
223
|
+
try expectApproxEqAbs(@as(f32, -0.997495), sinf(-1.5), epsilon);
|
|
224
|
+
try expectApproxEqAbs(@as(f32, -0.24654257), sinf(37.45), epsilon);
|
|
225
|
+
try expectApproxEqAbs(@as(f32, 0.9161657), sinf(89.123), epsilon);
|
|
174
226
|
}
|
|
175
227
|
|
|
176
228
|
test "sin32.special" {
|
|
177
|
-
try
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
229
|
+
try testSinSpecial(f32);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
test "sin64.normal" {
|
|
233
|
+
const epsilon = math.floatEps(f64);
|
|
234
|
+
try expectApproxEqAbs(@as(f64, 0.0), sin(0.0), epsilon);
|
|
235
|
+
try expectApproxEqAbs(@as(f64, 0.19866933079506122), sin(0.2), epsilon);
|
|
236
|
+
try expectApproxEqAbs(@as(f64, 0.7785173385577349), sin(0.8923), epsilon);
|
|
237
|
+
try expectApproxEqAbs(@as(f64, 0.9974949866040544), sin(1.5), epsilon);
|
|
238
|
+
try expectApproxEqAbs(@as(f64, -0.9974949866040544), sin(-1.5), epsilon);
|
|
239
|
+
try expectApproxEqAbs(@as(f64, -0.24654331551411082), sin(37.45), epsilon);
|
|
240
|
+
try expectApproxEqAbs(@as(f64, 0.9161652766622714), sin(89.123), epsilon);
|
|
182
241
|
}
|
|
183
242
|
|
|
184
243
|
test "sin64.special" {
|
|
185
|
-
try
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
244
|
+
try testSinSpecial(f64);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
test "sin80.normal" {
|
|
248
|
+
const epsilon = math.floatEps(f80);
|
|
249
|
+
try expectApproxEqAbs(@as(f80, 0.0), sinx(0.0), epsilon);
|
|
250
|
+
try expectApproxEqAbs(@as(f80, 0.19866933079506121545941262711838975), sinx(0.2), epsilon);
|
|
251
|
+
try expectApproxEqAbs(@as(f80, 0.77851733855773487830689285621486050), sinx(0.8923), epsilon);
|
|
252
|
+
try expectApproxEqAbs(@as(f80, 0.99749498660405443094172337114148732), sinx(1.5), epsilon);
|
|
253
|
+
try expectApproxEqAbs(@as(f80, -0.99749498660405443094172337114148732), sinx(-1.5), epsilon);
|
|
254
|
+
try expectApproxEqAbs(@as(f80, -0.24654331551411356504), sinx(37.45), epsilon);
|
|
255
|
+
try expectApproxEqAbs(@as(f80, 0.91616527666226951006), sinx(89.123), epsilon);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
test "sin80.special" {
|
|
259
|
+
try testSinSpecial(f80);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
test "sin128.normal" {
|
|
263
|
+
const epsilon = math.floatEps(f128);
|
|
264
|
+
try expectApproxEqAbs(@as(f128, 0.0), sinq(0.0), epsilon);
|
|
265
|
+
try expectApproxEqAbs(@as(f128, 0.19866933079506121545941262711838975), sinq(0.2), epsilon);
|
|
266
|
+
try expectApproxEqAbs(@as(f128, 0.77851733855773487830689285621486050), sinq(0.8923), epsilon);
|
|
267
|
+
try expectApproxEqAbs(@as(f128, 0.99749498660405443094172337114148732), sinq(1.5), epsilon);
|
|
268
|
+
try expectApproxEqAbs(@as(f128, -0.99749498660405443094172337114148732), sinq(-1.5), epsilon);
|
|
269
|
+
try expectApproxEqAbs(@as(f128, -0.24654331551411356571238581321661085), sinq(37.45), epsilon);
|
|
270
|
+
try expectApproxEqAbs(@as(f128, 0.91616527666226951075019849560482170), sinq(89.123), epsilon);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
test "sin128.special" {
|
|
274
|
+
try testSinSpecial(f128);
|
|
190
275
|
}
|
|
191
276
|
|
|
192
277
|
test "sin32 #9901" {
|