This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug math/6869] New: sin() and cos() return grossly wrong results when rounding is set to upward
- From: "bagnara at cs dot unipr dot it" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sources dot redhat dot com
- Date: 5 Sep 2008 19:34:41 -0000
- Subject: [Bug math/6869] New: sin() and cos() return grossly wrong results when rounding is set to upward
- Reply-to: sourceware-bugzilla at sourceware dot org
$ cat bug2.cc
#include <fenv.h>
#include <iostream>
#include <cmath>
int main() {
double theta = 5.27905511969922880410877041867934167385101318359375;
std::cout << "theta = " << theta << "\n";
std::cout << "sin(theta) = " << sin(theta) << "\n";
std::cout << "cos(theta) = " << cos(theta) << "\n";
std::cout << "Repeating after setting the rounding direction to UPWARD:"
<< std::endl;
fesetround(FE_UPWARD);
std::cout << "theta = " << theta << "\n";
std::cout << "sin(theta) = " << sin(theta) << "\n";
std::cout << "cos(theta) = " << cos(theta) << "\n";
}
$ g++ -W -Wall bug2.cc
$ a.out
theta = 5.27906
sin(theta) = -0.843695
cos(theta) = 0.536822
Repeating after setting the rounding direction to UPWARD:
theta = 5.27906
sin(theta) = -0.119458
cos(theta) = 12.1636
$
This happens on a Fedora 7, x86_64 system, with glibc-2.6-4
and GCC 4.3.2.
As you see, after setting the rounding direction to UPWARD,
the results are grossly wrong, to the point of cos() returning
12.1636. The value computed by second invocation of sin() is
also wrong.
--
Summary: sin() and cos() return grossly wrong results when
rounding is set to upward
Product: glibc
Version: unspecified
Status: NEW
Severity: normal
Priority: P2
Component: math
AssignedTo: aj at suse dot de
ReportedBy: bagnara at cs dot unipr dot it
CC: glibc-bugs at sources dot redhat dot com
GCC host triplet: athlon64-unknown-linux-gnu
http://sourceware.org/bugzilla/show_bug.cgi?id=6869
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.