  lua-l archive

• Subject: Re: Deviation in math functions
• From: KHMan <keinhong@...>
• Date: Fri, 10 Feb 2012 17:12:30 +0800

```On 2/10/2012 4:18 PM, roman.maire@besonet.ch wrote:
```
```[snip]
angle = 270
originx = 0
originy = 100
distance = 100

x = (originx + (math.cos(math.rad(angle)) * distance))
y = (originy + (math.sin(math.rad(angle)) * distance))
print("x: ".. x ..", y: ".. y)

Output:
-> x: -1.836970198721e-014, y: 0

I was expecting that x should be 0 too.

am I missing something here?
```
```
```
It's near the expected error magnitude. A double has about 16 digits of precision with 53 significand bits. For the calculation you used, each of the following are not perfectly precise so error accumulates:
```
(1) #define PI (3.14159265358979323846) in lmathlib.c
(2) #define RADIANS_PER_DEGREE (PI/180.0) in lmathlib.c
(4) math.sin(...)
(5) math.sin(... * distance)
(6) (originx + ...)

```
Each operation adds to the amount of error. So 14-15 digits is about right. But it should be enough for almost everyone, after all, 1000km to 1mm is only a magnitude of 9. As HyperHacker suggests, some Googling and study on the Internet should sort it out...
```
--
Cheers,
Kein-Hong Man (esq.)
Kuala Lumpur, Malaysia

```