-
-
Notifications
You must be signed in to change notification settings - Fork 705
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
std.math: struct FloatingPointControl, duplicate code and assumes X86 #9582
Labels
Comments
ibuclaw (@ibuclaw) commented on 2010-12-05T08:30:25ZHmm... also found in <fenv.h>, so perhaps should just be importing core.stdc.fenv (merging any bits added by std.math). |
lt.infiltrator commented on 2015-11-01T02:43:21ZIs this still an issue? I'd have a look at the source, but I'm afraid that I wouldn't be able to tell what's X86 or SPARC, etc. |
ibuclaw (@ibuclaw) commented on 2015-11-01T07:59:10Z(In reply to Infiltrator from comment #2)
> Is this still an issue? I'd have a look at the source, but I'm afraid that
> I wouldn't be able to tell what's X86 or SPARC, etc.
Well, X86 code is guarded by a version(X86) block, SPARC code by a version(SPARC) block. :-) |
ibuclaw (@ibuclaw) commented on 2015-11-01T08:13:25ZBoth struct FloatingPointControl and Ieeeflags still have their own private enums. Since these values should be mirrored somewhere in druntime stdc (it looks like the me of five years ago couldn't work out where when searching through the libc headers), then yes this is still a valid refactoring. |
chatelet.guillaume commented on 2017-03-03T12:05:22ZIt seems to me that setting rounding mode and testing for inexact does not work correctly on x86_64.
Correct code using the C bindings:
void main() {
import core.stdc.fenv;
fesetround(FE_UPWARD);
float x = 1.0f;
x += float.min_normal;
writefln("%.32g, inexact: %s", x, fetestexcept(FE_INEXACT) > 0);
}
> Output: 1.00000011920928955078125, inexact: true
The same code using FloatingPointControl and IeeeFlags does not work at all (neither set round nor test except)
void main() {
resetIeeeFlags();
FloatingPointControl fpctrl;
fpctrl.rounding = FloatingPointControl.roundUp;
float x = 1.0f;
x += float.min_normal;
writefln("%.32g, inexact: %s", x, ieeeFlags.inexact);
}
> Output: 1, inexact: false
Linked discussion: http://forum.dlang.org/post/qybweycrifqgtcssepgx@forum.dlang.org |
ibuclaw (@ibuclaw) commented on 2018-02-10T14:12:02ZHas been improved somewhat by:
https://github.com/dlang/phobos/pull/4272
https://github.com/dlang/phobos/pull/5769 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ibuclaw (@ibuclaw) reported this on 2010-12-05T08:01:19Z
Transfered from https://issues.dlang.org/show_bug.cgi?id=5323
CC List
Description
The text was updated successfully, but these errors were encountered: