@@ -3425,17 +3425,55 @@ Argument Ranges</h4>
3425
3425
3426
3426
In ''tan(A)'' , if A is one of the asymptote values
3427
3427
(such as ''90deg'' , ''270deg'' , etc),
3428
- the result must be +∞ for ''90deg'' and all values a multiple of ''360deg'' from that
3429
- (such as ''-270deg'' or ''450deg'' ),
3430
- and −∞ for ''-90deg'' and all values a multiple of ''360deg'' from that
3431
- (such as ''-450deg'' or ''270deg'' ).
3432
-
3433
- Note: This is only relevant for units that can exactly represent the asymptotic values,
3434
- such as ''deg'' or ''grad'' .
3435
- ''rad'' cannot,
3436
- and so whether the result is a very large negative or positive value
3437
- can depend on rounding and precise details of how numbers are internally stored.
3438
- It's recommended you don't depend on this behavior if using such units.
3428
+ the result is <strong> explicitly undefined</strong> .
3429
+ If an implementation is capable of exactly representing these inputs,
3430
+ it <em> should</em> return
3431
+ +∞ for the asymptotes at <code> 90deg + N*360deg</code> ,
3432
+ and −∞ for the asymptotes at <code> -90deg + N*360deg</code> ,
3433
+ but implementations are not required to be able to exactly represent these inputs
3434
+ (and if they can't, will return whatever the correct numeric answer is
3435
+ for the closest approximation to the input
3436
+ they are capable of representing).
3437
+ Authors <em> must not</em> rely on ''tan()'' returning any particular value
3438
+ for these inputs.
3439
+
3440
+ <details class=note>
3441
+ <summary> Why are these undefined?</summary>
3442
+
3443
+ The tangent function is <em> discontinuous</em> at its asymptotes:
3444
+ it approaches infinity from one side
3445
+ <em> and</em> negative infinity from the other side,
3446
+ and isn't defined at the exact values of the asymptote.
3447
+
3448
+ Further, whether or not the asymptotic values
3449
+ are exactly representable in implementations
3450
+ depends on how they internally store and manipulate angles;
3451
+ when written in degrees the values are simple (''90deg'' , etc),
3452
+ but in radians the values are transcendental (''pi / 2'' , etc)
3453
+ and cannot be exactly represented.
3454
+ So, even defining a specific behavior for these values is difficult;
3455
+ if an implementation uses radians internally,
3456
+ it would have to do some fuzzy matching
3457
+ to return the defined value
3458
+ when the input is <em> sufficiently close</em> to the asymptote.
3459
+
3460
+ The other major language for the Web, JavaScript,
3461
+ exposes these functions as taking radians only,
3462
+ so it can't hit the exact asymptotes either
3463
+ (and this true for most other computer languages, too).
3464
+ Authors writing code in JS, then,
3465
+ can't rely on any specific behavior for these values either,
3466
+ and it's unlikely that their needs in CSS are significantly different.
3467
+
3468
+ The suggested behavior for implementations that can exactly represent the asymptote values
3469
+ preserves round-tripping with the ''atan()'' function:
3470
+ ''tan(atan(X))'' and ''atan(tan(X))''
3471
+ will both return (approximately) X
3472
+ for all possible X values,
3473
+ given this definition.
3474
+ It also means that within the supported output range of ''atan()'' ,
3475
+ the function is continuous.
3476
+ </details>
3439
3477
3440
3478
In ''asin(A)'' or ''acos(A)'' ,
3441
3479
if A is less than -1 or greater than 1,
@@ -3518,16 +3556,6 @@ Argument Ranges</h4>
3518
3556
as implemented by most programming languages,
3519
3557
in particular as implemented in JS.
3520
3558
3521
- Note: The behavior of ''tan(90deg)'' ,
3522
- while not constrained by JS behavior
3523
- (because the JS function's input is in radians,
3524
- and one cannot perfectly express a value of π/2 in JS numbers),
3525
- is defined so that roundtripping of values works;
3526
- ''tan(atan(infinity))'' yields +∞,
3527
- ''tan(atan(-infinity))'' yields −∞,
3528
- ''atan(tan(90deg))'' yields ''90deg'' ,
3529
- and ''atan(tan(-90deg))'' yields ''-90deg'' .
3530
-
3531
3559
3532
3560
<h3 id=exponent-funcs>
3533
3561
Exponential Functions: ''pow()'', ''sqrt()'', ''hypot()'', ''log()'', ''exp()''</h3>
0 commit comments