Skip to content
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

sin(pi) != 0 #164

Open
Roman-Kerimov opened this issue Mar 26, 2019 · 3 comments
Open

sin(pi) != 0 #164

Roman-Kerimov opened this issue Mar 26, 2019 · 3 comments

Comments

@Roman-Kerimov
Copy link

Roman-Kerimov commented Mar 26, 2019

This can be fixed so:

extension Double {
    func isDivisible(by value: Double) -> Bool {
        let decimalNumberFormatter = NumberFormatter.init()
        decimalNumberFormatter.numberStyle = .decimal
        return decimalNumberFormatter.string(from: .init(value: self/value))?.contains(decimalNumberFormatter.decimalSeparator) == false
    }
}

func sin(_ value: Double) -> Double {
    return value.isDivisible(by: .pi) ? 0 : Foundation.sin(value)
}
    
func cos(_ value: Double) -> Double {
    return (.pi/2+value).isDivisible(by: .pi) ? 0 : Foundation.cos(value)
}
    
func tan(_ value: Double) -> Double {
    return value.isDivisible(by: .pi) ? 0 : (.pi/2+value).isDivisible(by: .pi) ? .infinity : Foundation.tan(value)
}
@p-i-
Copy link

p-i- commented May 26, 2019

@Roman-Kerimov Was this you? If so, please get in touch if you're interested in involving in a project. I can't find your contact details anywhere. My apologies to the repository maintainer for an off-topic comment.

@Roman-Kerimov
Copy link
Author

@p-i- Yes it's me. I added mail to my profile.

@aheze
Copy link

aheze commented Dec 22, 2023

@Roman-Kerimov how safe is this approach? It works fine in my testing but using NumberFormatter for this seems sketchy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants