Re: Exponents in <number>

Hi Bert,

On 06/09/2008, at 8:38 PM, Bert Bos wrote:

> Changing it would be difficult. Existing software is free to rewrite  
> "100E+5" as "100e + 5" and "1.4E+1cm" as "1.4e + 1cm". And if some  
> hypothetical new software rewrites 100 as 1E+2, then old programs  
> will not understand the supposedly equivalent value anymore.

Yeah, I suspected this would be a difficult change since it is at the  
syntax level.

>> Large or small numbers can happen, especially when you nest things  
>> and the scale accumulates. Accuracy matters. With features like  
>> page zoom, transformations and resolution-independent displays it's  
>> going to become more common.
>
> CSS actually doesn't need a lot of range or accuracy. Typical sizes  
> in CSS range from half a pt to a couple of cm. That's a ratio of  
> 1:10000 or  about 15 bits. And as for accuracy, the wavelength of  
> light is about 0.001 pt, so smaller sizes than that are invisible  
> anyway. Those limits aren't based on limits in technology, but on  
> limits in people, and they aren't likely to change for the next  
> 100,000 years.

This is true, except that I can imagine using CSS to display content  
on a massive screen like those at a football stadium. But that doesn't  
really significantly change the orders of magnitude you're talking  
about.

What *does* change it is transforms. If you nest elements and  
transform them, especially with animation (either via JS or the  
proposed CSS), then you need the precision. And it isn't restricted to  
unusual use cases - a regular rotation needs such accuracy.

Another example is opacity, where there is significantly different  
behaviour for numbers < 1 as opposed to 1 (and opacity is unitless).

In summary, I think it's time to start considering higher precision.

Meanwhile, here is a test case that shows Mozilla and WebKit both  
return numbers in exponential format (I didn't test other browsers):

<html>
<head>
   <title>Testing getComputedStyle return values</title>
   <style type="text/css" media="screen">
     #a {
       opacity: 0.0000000001;
     }
   </style>
</head>
<body>
   <p id="a">Very transparent paragraph</p>
   <p>
     <script type="text/javascript" charset="utf-8">
       document.write("Opacity is: " +  
window.getComputedStyle(document.getElementById("a"), "").opacity);
     </script>
   </p>
</body>
</html>

Received on Monday, 8 September 2008 21:32:16 UTC