# Calculating cos(0.9528) in BigFloat

**URL:** https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489
**Category:** General Usage
**Created:** [December 4, 2017, 2:04am UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489 "2017-12-04T02:04:18Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Diger](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/diger/32/36786_2.png) [@Diger](https://discourse.julialang.org/u/Diger)
#### Post date: [December 4, 2017, 2:04am UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/1 "2017-12-04T02:04:19Z")

</div>

So I (incited by some others) calculated the following

```julia
setprecision(15*10^5)
x=big(9528)/10000;
y=cos(x);
ys=string(y);
ys[306890:306931]
"459423813195289597370437889596885962619893..."

```

Now this is somehow wrong…The correct sequence is:  
“459423813195289597370437889596885917728725…”

In fact doing one newton-iteration with the first wrong number:

```julia
yn=y;
yn=yn+(acos(yn)-x)*sqrt(1-yn^2);

```

gives the desired result above, which I would have assumed however to be correct in the first place…  
So what is going wrong here?

---

<div class="post-metadata">

### Author: ![Ralph\_Smith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ralph_smith/32/10344_2.png) [@Ralph\_Smith](https://discourse.julialang.org/u/Ralph_Smith)
#### Post date: [December 4, 2017, 2:53am UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/2 "2017-12-04T02:53:40Z")

</div>

> [@Diger](#):
>
> x=big(9528)/10000;

is not a good way to build a `BigFloat`.

```julia
julia> x=big(9528.0)/10000;

julia> y=cos(x);

julia> ys=string(y);

julia> ys[306890:306931]
"459423813195289597370437889596885917728725"

```

Edit: Ouch, I stand corrected; promotion should work here.

---

<div class="post-metadata">

### Author: ![simonbyrne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simonbyrne/32/19_2.png) [@simonbyrne](https://discourse.julialang.org/u/simonbyrne)
#### Post date: [December 4, 2017, 3:29am UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/3 "2017-12-04T03:29:37Z")

</div>

These should be exactly the same. If you’re using 0.6.0 (or earlier) on Windows, you might be hitting:  
[https://github.com/JuliaLang/julia/issues/22758](https://github.com/JuliaLang/julia/issues/22758)

Try using 0.6.1, as this includes MPFR 3.1.5 which fixes the issue.

---

<div class="post-metadata">

### Author: ![simonbyrne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simonbyrne/32/19_2.png) [@simonbyrne](https://discourse.julialang.org/u/simonbyrne)
#### Post date: [December 4, 2017, 6:07am UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/4 "2017-12-04T06:07:39Z")

</div>

Also, an easier way to do this is to use the `big` string macro:

```julia
x = big"0.9528"

```

---

<div class="post-metadata">

### Author: ![Diger](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/diger/32/36786_2.png) [@Diger](https://discourse.julialang.org/u/Diger)
#### Post date: [December 4, 2017, 11:50am UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/5 "2017-12-04T11:50:37Z")

</div>

> Blockquote is not a good way to build a BigFloat.  
> I first tried  
> big(0.9528) but this was completely giving me the wrong number…

Actually: x=big(9528.0)/10000  
like Ralph did still gives me the wrong answer…  
I’m using v0.5

So I need at least v0.6.1 ? I will try…

---

<div class="post-metadata">

### Author: ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)
#### Post date: [December 4, 2017, 12:01pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/6 "2017-12-04T12:01:21Z")

</div>

On `v0.6.1`,

```julia
julia> big(9528.0)/10000
9.527999999999999999999999999999999999999999999999999999999999999999999999999998e-01

```

which is the same as `big"0.9528"`.

---

<div class="post-metadata">

### Author: ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)
#### Post date: [December 4, 2017, 1:06pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/7 "2017-12-04T13:06:33Z")

</div>

You shouldn’t be doing something like `big(9528.0)`, because that first creates a `Float64` `9528.0`, which means it may have already lost information, before converting it to a `BigFloat`.

---

<div class="post-metadata">

### Author: ![stevengj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stevengj/32/71_2.png) [@stevengj](https://discourse.julialang.org/u/stevengj)
#### Post date: [December 4, 2017, 1:11pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/8 "2017-12-04T13:11:09Z")

</div>

> [@ScottPJones](#):
>
> You shouldn’t be doing something like big(9528.0), because that first creates a Float64 9528.0, which means it may have already lost information, before converting it to a BigFloat.

Integers (up to 2^53) are represented exactly in floating-point arithmetic, so converting an exactly representable `Float64` like 9528.0 to `BigFloat` is perfectly safe.

---

<div class="post-metadata">

### Author: ![Diger](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/diger/32/36786_2.png) [@Diger](https://discourse.julialang.org/u/Diger)
#### Post date: [December 4, 2017, 1:12pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/9 "2017-12-04T13:12:15Z")

</div>

Why is big(9528)/10000 not a good way then to build a big float?

---

<div class="post-metadata">

### Author: ![ScottPJones](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/scottpjones/32/146_2.png) [@ScottPJones](https://discourse.julialang.org/u/ScottPJones)
#### Post date: [December 4, 2017, 1:12pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/10 "2017-12-04T13:12:21Z")

</div>

In that particular case, yes. I was talking about the general case, where one shouldn’t do `big(<some float literal>)` to create a `BigFloat`.  
(I was aware that in that particular case, it didn’t lose information, but you shouldn’t be encouraging a poor programming practice, that’s confused a lot of people already)

---

<div class="post-metadata">

### Author: ![Ralph\_Smith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ralph_smith/32/10344_2.png) [@Ralph\_Smith](https://discourse.julialang.org/u/Ralph_Smith)
#### Post date: [December 4, 2017, 1:40pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/11 "2017-12-04T13:40:30Z")

</div>

I was wrong; `big(9528)` makes a `BigInt` and I mistakenly thought that your problem was division not done in full `BigFloat` precision.

---

<div class="post-metadata">

### Author: ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)
#### Post date: [December 4, 2017, 5:52pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/12 "2017-12-04T17:52:12Z")

</div>

Please quote your code.

---

<div class="post-metadata">

### Author: ![simonbyrne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simonbyrne/32/19_2.png) [@simonbyrne](https://discourse.julialang.org/u/simonbyrne)
#### Post date: [December 4, 2017, 9:59pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/13 "2017-12-04T21:59:58Z")

</div>

Presumably they were aware of that, since they wrote `big(9528.0)/10000` instead of `big(0.9528)`

---

<div class="post-metadata">

### Author: ![Diger](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/diger/32/36786_2.png) [@Diger](https://discourse.julialang.org/u/Diger)
#### Post date: [December 4, 2017, 10:25pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/14 "2017-12-04T22:25:02Z")

</div>

So now that I installed 0.6.1 I tried again, but I get the same wrong answer?  
Wasn’t it fixed with MPFR 3.1.5 which was implemented in 0.6.1?

---

<div class="post-metadata">

### Author: ![simonbyrne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simonbyrne/32/19_2.png) [@simonbyrne](https://discourse.julialang.org/u/simonbyrne)
#### Post date: [December 5, 2017, 3:43am UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/15 "2017-12-05T03:43:32Z")

</div>

What does

```julia
unsafe_string(ccall((:mpfr_get_version,:libmpfr), Ptr{Cchar}, ()))

```

give?

---

<div class="post-metadata">

### Author: ![simonbyrne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simonbyrne/32/19_2.png) [@simonbyrne](https://discourse.julialang.org/u/simonbyrne)
#### Post date: [December 5, 2017, 5:57am UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/16 "2017-12-05T05:57:06Z")

</div>

Hmm, looks like it wasn’t fixed.

---

<div class="post-metadata">

### Author: ![simonbyrne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simonbyrne/32/19_2.png) [@simonbyrne](https://discourse.julialang.org/u/simonbyrne)
#### Post date: [December 5, 2017, 6:07am UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/17 "2017-12-05T06:07:42Z")

</div>

Ah, never mind. It was fixed in the 3.1.6 release of MPFR. We need to upgrade…

---

<div class="post-metadata">

### Author: ![Diger](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/diger/32/36786_2.png) [@Diger](https://discourse.julialang.org/u/Diger)
#### Post date: [December 5, 2017, 5:17pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/18 "2017-12-05T17:17:43Z")

</div>

It gives 3.1.5

---

<div class="post-metadata">

### Author: ![simonbyrne](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simonbyrne/32/19_2.png) [@simonbyrne](https://discourse.julialang.org/u/simonbyrne)
#### Post date: [December 5, 2017, 5:49pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/19 "2017-12-05T17:49:32Z")

</div>

Apologies: it wasn’t fixed in 3.1.5, only 3.1.6. Unfortunately, this hasn’t made it’s way into the releases yet.

---

<div class="post-metadata">

### Author: ![Diger](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/diger/32/36786_2.png) [@Diger](https://discourse.julialang.org/u/Diger)
#### Post date: [December 5, 2017, 5:50pm UTC](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489/20 "2017-12-05T17:50:11Z")

</div>

When will it be out?

[Next page](https://discourse.julialang.org/t/calculating-cos-0-9528-in-bigfloat/7489.md?page=2)
