java

时间:2015-09-26 06:09:45

标签: java bigdecimal numerical-analysis

我必须计算以下功能:

f(x)=x^3-x-1

我创建了一个名为“Function”的类,在其中,我有一个计算上述函数的方法。

我的代码来了:

double function(double num)
{
    BigDecimal first,second;
    double a,b,c,b_copy;
    a = Math.pow(num, 3);
    b=(double)a-num;
    first=new  BigDecimal(b);
    second=new BigDecimal("1.0");
    first.min(second);
    b_copy=first.doubleValue();
    return b_copy ;
} 

我实际上对这两行代码有一些问题:

    first.min(second);
    b_copy=first.doubleValue();

例如当num为0时b_copy必须为-1,但它为0.为什么会这样?

2 个答案:

答案 0 :(得分:4)

public class MainActivity extends ListActivity { private static final int EDITOR_ACTIVITY_REQUEST = 1001; private static final int MENU_DELETE_ID = 1002; private int currentNoteId; private NotesDataSource datasource; List<NoteItem> notesList; int count = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); datasource = new NotesDataSource(this); refreshDisplay(); TextView tv = (TextView) findViewById(R.id.textView1); tv.setText(""+count); } private void refreshDisplay() { notesList = datasource.findAll(); ArrayAdapter<NoteItem> adapter = new ArrayAdapter<NoteItem>(this, R.layout.list_item_layout, notesList); setListAdapter(adapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.action_create) { createNote(null); } return super.onOptionsItemSelected(item); } public void createNote(View v) { NoteItem note = NoteItem.getNew(); Intent intent = new Intent(this, NoteEditorActivity.class); intent.putExtra(NoteItem.KEY, note.getKey()); intent.putExtra(NoteItem.TEXT, note.getText()); startActivityForResult(intent, EDITOR_ACTIVITY_REQUEST); int defaultValue = getPreferences(MODE_PRIVATE).getInt("count_key", count); ++defaultValue; getPreferences(MODE_PRIVATE).edit().putInt("count_key", defaultValue).commit(); count = getPreferences(MODE_PRIVATE).getInt("count_key", count); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { NoteItem note = notesList.get(position); Intent intent = new Intent(this, NoteEditorActivity.class); intent.putExtra(NoteItem.KEY, note.getKey()); intent.putExtra(NoteItem.TEXT, note.getText()); startActivityForResult(intent, EDITOR_ACTIVITY_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == EDITOR_ACTIVITY_REQUEST && resultCode == RESULT_OK) { NoteItem note = new NoteItem(); note.setKey(data.getStringExtra(NoteItem.KEY)); note.setText(data.getStringExtra(NoteItem.TEXT)); datasource.update(note); refreshDisplay(); } } } 方法返回min(...),但不会对其进行修改。 试试这个:

BigDecimal

此外,如果您想从first = first.min(second); 的值中减去1(如公式所示),请使用first方法,因为subtract(...)实际上返回的是最小值两个min(...) s。

BigDecimal

答案 1 :(得分:4)

BigDecimal类是不可变的。一旦创建,你就无法改变。

当您更改该对象时,它始终返回一个新对象。

@echo off
setlocal enabledelayedexpansion

set J=1
for /R "D:\TEST" %%I in (*.txt) do (
    if not "%%~nxI"=="test.txt" (
        set XCOUNT_!J!=%%I
        set /a J+=1
    )
)

要接收新创建的对象,可以编写

first=new  BigDecimal(b);  //  you created an object
second=new BigDecimal("1.0");
first.min(second); // you just modifying it. Hence a new object returned and you never received.

当您编写此内容时,您将分配第一个修改后的first = first.min(second); 返回

不仅BigDecimal,如果你在BigDecimal上执行任何操作,你需要重新分配它。