嘿,在一些类别上工作,我遇到了一个奇怪的问题,我基本上在计算器类上扩展以添加一些trig方法,当我在返回时调用sin方法时,我得到的值不正确双重的形式。我向方法发送一个值100.7,它返回0.168231,从我可以看到正确的值应该是= 0.939693或那里。
继承代码,我还在这里附上了一个完整项目的链接:
(感谢)
http://files.me.com/knyck2/svpfd4
//
// Calculator_trig.m
// 11.4_calculator_trig
//
// Created by Nicholas Iannone on 1/6/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "Calculator_trig.h"
#import <math.h>
@implementation Calculator (Trigonometry)
-(double) sin
{
double result;
result = (double) sin (accumulator);
return result;
}
-(double) cos
{
double result;
result = cos ( accumulator);
return result;
}
-(double) tan
{
double result;
result = tan ( accumulator);
return result;
}
@end
#import "Calculator.h"
@implementation Calculator
-(void) setAccumulator: (double) value
{
accumulator = value;
}
-(void) clear
{
accumulator = 0;
}
-(double) accumulator
{
return accumulator;
}
-(double) memoryClear
{
memory = 0;
NSLog(@"memory has been cleared");
return accumulator;
}
-(double) memoryStore
{
memory = accumulator;
NSLog(@"memory has been set to %g", memory);
return accumulator;
}
-(double) memoryRecall
{
accumulator = memory;
NSLog(@"accumulator has been set to %g", accumulator);
return accumulator;
}
-(double) memoryAdd
{
memory += accumulator;
NSLog(@"accumulator: %g has been added to memory, memory is now %g", accumulator, memory);
return accumulator;
}
-(double) memorySubtract
{
memory -= accumulator;
NSLog(@"accumulator: %g has been subtracted from memory, memory is now %g", accumulator, memory);
return accumulator;
}
-(double) add: (double) value
{
accumulator += value;
return accumulator;
}
-(double) subtract: (double) value
{
accumulator -= value;
return accumulator;
}
-(double) multiply: (double) value
{
accumulator *= value;
return accumulator;
}
-(double) divide: (double) value
{
accumulator /= value;
return accumulator;
}
-(double) changeSign
{
accumulator = -accumulator;
return accumulator;
}
-(double) reciprocal
{
accumulator = 1 / accumulator;
return accumulator;
}
-(double) xSquared
{
accumulator *= accumulator;
return accumulator;
}
@end
#import <Foundation/Foundation.h>
#import "Calculator.h"
#import "Calculator_trig.h"
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Calculator *myCalc = [[Calculator alloc] init];
double a = 0;
[myCalc setAccumulator: 100.70];
a = [myCalc sin];
NSLog(@" sin of accumulator = %f", a);
[myCalc release];
[pool drain];
return 0;
}
答案 0 :(得分:12)
你正在计算100.7弧度的罪,给出的答案是正确的。
答案 1 :(得分:10)
期待弧度。要获得所需的答案,请首先将度数转换为弧度:
// [radians] = [degrees] * [pi]/180
double theta = 100.7 * M_PI/180;
// sin(1.757 radians) == ~0.98
double result = sin(theta);
答案 2 :(得分:5)
它期待弧度
答案 3 :(得分:1)
根据谷歌的说法,答案是正确的。注意谷歌假设弧度。
答案 4 :(得分:0)
sin函数期待弧度。如果你想获得学位,你需要将学位转换为弧度。
你是怎么做到的?
简单。
在圆圈中有360度。有多少弧度?
Radian定义为角度前面的弧长除以半径之间的比率。
因此,对于一个完整的圆,圆弧的长度就是圆的圆周。
圆圈的整周是多少?
嗯,π定义为圆周长与直径之比。
什么是直径?
嗯,直径是半径的2倍。基本上直径是穿过圆心的线,当线与圆相交时结束。半径是从中心开始并以圆圈结束的线。
所以
圆的周长是π*直径=π* 2 *半径=2π半径。这缩短为2πr,其中r是半径。
那么,一个圆圈中有多少个弧度?
易
将圆的圆周除以半径。田田你有2πr/ r =2π。
那2π相当于360度。
所以如果我们知道学位,我们怎么知道弧度?
简单,我们乘以2π然后将它除以360.
所以我们将整个事物乘以2π/ 360 =π/ 180。
一种看待这种情况的方法是想象弧度和度数是“单位”。每180度有π弧度。这意味着π弧度/ 180度是1,因为它们是完全相同数字的比率。
所以,如果你有107度,那107
IS 107度* 1 = 107度*π弧度/ 180度。当然电脑不关心单位。最后它变成107 *π/ 180。
在Objective-c中,M_PI是一个存储π的值的常量。
我会做的是宣布
#define radianperdegree (M_PI/180)
现在,值不是真的1.但是,从概念上讲,如果我们考虑单位,radianperdegree确实是1。那是因为1弧度大于1度。
要获得弧度的角度,我不能改变角度。我所做的是将其乘以一个概念为1的数字。所以我乘以radianperdegree。结果是一个小得多的数字。但是,这个小得多的数字代表完全相同的角度。这是因为更小的数字是弧度的角度大小,每个弧度更大。
然后我做
double result = sin(100.7 * radianperdegree);
多田.....
清除?
您可以做的另一件事是定义
#define RADTODEG(x) ((x) * 57.29578)
#define DEGTORAD(x) ((x) / 57.29578)
然后使用罪(DEGTORAD(107))